Perl - Datei-E / A.

Die Grundlagen des Umgangs mit Dateien sind einfach: Sie ordnen a zu filehandle mit einer externen Entität (normalerweise einer Datei) und verwenden Sie dann eine Vielzahl von Operatoren und Funktionen in Perl, um die Daten zu lesen und zu aktualisieren, die in dem mit dem Dateihandle verknüpften Datenstrom gespeichert sind.

Ein Dateihandle ist eine benannte interne Perl-Struktur, die eine physische Datei mit einem Namen verknüpft. Alle Dateihandles können lesen / schreiben, sodass Sie alle Dateien oder Geräte lesen und aktualisieren können, die einem Dateihandle zugeordnet sind. Wenn Sie jedoch ein Dateihandle zuordnen, können Sie den Modus angeben, in dem das Dateihandle geöffnet wird.

Drei grundlegende Dateihandles sind - STDIN, STDOUT, und STDERR, die Standardeingabe-, Standardausgabe- und Standardfehlergeräte darstellen.

Dateien öffnen und schließen

Es gibt zwei Funktionen mit mehreren Formularen, mit denen Sie jede neue oder vorhandene Datei in Perl öffnen können.

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

Hier ist FILEHANDLE das von der zurückgegebene Dateihandle open Funktion und EXPR ist der Ausdruck mit dem Dateinamen und dem Modus zum Öffnen der Datei.

Funktion öffnen

Es folgt die zu öffnende Syntax file.txtim schreibgeschützten Modus. Hier bedeutet weniger als <Zeichen, dass die Datei im schreibgeschützten Modus geöffnet werden muss.

open(DATA, "<file.txt");

Hier ist DATA das Dateihandle, mit dem die Datei gelesen wird. Hier ist das Beispiel, das eine Datei öffnet und ihren Inhalt über den Bildschirm druckt.

#!/usr/bin/perl

open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!";

while(<DATA>) {
   print "$_";
}

Es folgt die Syntax zum Öffnen von file.txt im Schreibmodus. Hier bedeutet weniger als>, dass die Datei im Schreibmodus geöffnet werden muss.

open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";

In diesem Beispiel wird die Datei tatsächlich abgeschnitten (geleert), bevor sie zum Schreiben geöffnet wird. Dies ist möglicherweise nicht der gewünschte Effekt. Wenn Sie eine Datei zum Lesen und Schreiben öffnen möchten, können Sie vor den Zeichen> oder <ein Pluszeichen setzen.

Zum Beispiel, um eine Datei zum Aktualisieren zu öffnen, ohne sie abzuschneiden -

open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";

So schneiden Sie die Datei zuerst ab -

open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";

Sie können eine Datei im Anhänge-Modus öffnen. In diesem Modus wird der Schreibpunkt auf das Ende der Datei gesetzt.

open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";

Ein doppeltes >> öffnet die Datei zum Anhängen und platziert den Dateizeiger am Ende, sodass Sie sofort mit dem Anhängen von Informationen beginnen können. Sie können jedoch nur dann daraus lesen, wenn Sie auch ein Pluszeichen davor platzieren.

open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";

Es folgt die Tabelle, in der die möglichen Werte für verschiedene Modi angegeben sind

Sr.Nr. Entitäten & Definition
1

< or r

Schreibgeschützter Zugriff

2

> or w

Erstellt, schreibt und schneidet ab

3

>> or a

Schreibt, hängt an und erstellt

4

+< or r+

Liest und schreibt

5

+> or w+

Liest, schreibt, erstellt und schneidet ab

6

+>> or a+

Liest, schreibt, hängt an und erstellt

Sysopen-Funktion

Das sysopen Die Funktion ähnelt der Hauptöffnungsfunktion, verwendet jedoch das System open() Funktion unter Verwendung der ihm zur Verfügung gestellten Parameter als Parameter für die Systemfunktion -

Um beispielsweise eine Datei zum Aktualisieren zu öffnen, emulieren Sie die +<filename Format von offen -

sysopen(DATA, "file.txt", O_RDWR);

Oder um die Datei vor dem Aktualisieren abzuschneiden -

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

Sie können O_CREAT verwenden, um eine neue Datei zu erstellen, und O_WRONLY, um eine Datei im schreibgeschützten Modus zu öffnen, und O_RDONLY, um eine Datei im schreibgeschützten Modus zu öffnen.

Das PERMSArgument gibt die Dateiberechtigungen für die angegebene Datei an, wenn diese erstellt werden muss. Standardmäßig dauert es0x666.

Es folgt die Tabelle, in der die möglichen Werte von MODE angegeben sind.

Sr.Nr. Entitäten & Definition
1

O_RDWR

Lesen und Schreiben

2

O_RDONLY

Schreibgeschützt

3

O_WRONLY

Nur schreiben

4

O_CREAT

Erstellen Sie die Datei

5

O_APPEND

Hängen Sie die Datei an

6

O_TRUNC

Schneiden Sie die Datei ab

7

O_EXCL

Stoppt, wenn die Datei bereits vorhanden ist

8

O_NONBLOCK

Nicht blockierende Benutzerfreundlichkeit

Funktion schließen

Um ein Dateihandle zu schließen und damit das Dateihandle von der entsprechenden Datei zu trennen, verwenden Sie die closeFunktion. Dadurch werden die Puffer des Dateihandles geleert und der Dateideskriptor des Systems geschlossen.

close FILEHANDLE
close

Wenn kein FILEHANDLE angegeben ist, wird das aktuell ausgewählte Dateihandle geschlossen. Es wird nur dann true zurückgegeben, wenn die Puffer erfolgreich geleert und die Datei geschlossen werden konnte.

close(DATA) || die "Couldn't close file properly";

Dateien lesen und schreiben

Sobald Sie ein offenes Dateihandle haben, müssen Sie in der Lage sein, Informationen zu lesen und zu schreiben. Es gibt verschiedene Möglichkeiten, Daten in die Datei zu lesen und zu schreiben.

Der Operator <FILEHANDL>

Die Hauptmethode zum Lesen der Informationen aus einem geöffneten Dateihandle ist der Operator <FILEHANDLE>. In einem skalaren Kontext wird eine einzelne Zeile aus dem Dateihandle zurückgegeben. Zum Beispiel -

#!/usr/bin/perl

print "What is your name?\n";
$name = <STDIN>;
print "Hello $name\n";

Wenn Sie den Operator <FILEHANDLE> in einem Listenkontext verwenden, wird eine Liste von Zeilen aus dem angegebenen Dateihandle zurückgegeben. Zum Beispiel, um alle Zeilen aus einer Datei in ein Array zu importieren -

#!/usr/bin/perl

open(DATA,"<import.txt") or die "Can't open data";
@lines = <DATA>;
close(DATA);

getc Funktion

Die Funktion getc gibt ein einzelnes Zeichen aus dem angegebenen FILEHANDLE oder STDIN zurück, wenn keines angegeben ist.

getc FILEHANDLE
getc

Wenn ein Fehler aufgetreten ist oder sich das Dateihandle am Ende der Datei befindet, wird stattdessen undef zurückgegeben.

Funktion lesen

Die Lesefunktion liest einen Informationsblock aus dem gepufferten Dateihandle: Mit dieser Funktion werden Binärdaten aus der Datei gelesen.

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

Die Länge der gelesenen Daten wird durch LENGTH definiert, und die Daten werden am Anfang von SCALAR platziert, wenn kein OFFSET angegeben ist. Andernfalls werden Daten nach OFFSET-Bytes in SCALAR platziert. Die Funktion gibt die Anzahl der bei Erfolg gelesenen Bytes zurück, Null am Ende der Datei oder undef, wenn ein Fehler aufgetreten ist.

Druckfunktion

Bei all den verschiedenen Methoden zum Lesen von Informationen aus Dateihandles ist die Hauptfunktion zum Zurückschreiben von Informationen die Druckfunktion.

print FILEHANDLE LIST
print LIST
print

Die Druckfunktion druckt den ausgewerteten Wert von LIST in FILEHANDLE oder in das aktuelle Ausgabe-Dateihandle (standardmäßig STDOUT). Zum Beispiel -

print "Hello World!\n";

Dateien kopieren

In diesem Beispiel wird eine vorhandene Datei file1.txt geöffnet, zeilenweise gelesen und eine weitere Kopierdatei file2.txt generiert.

#!/usr/bin/perl

# Open file to read
open(DATA1, "<file1.txt");

# Open new file to write
open(DATA2, ">file2.txt");

# Copy data from one file to another.
while(<DATA1>) {
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

Datei umbenennen

Hier ist ein Beispiel, das zeigt, wie wir eine Datei file1.txt in file2.txt umbenennen können. Angenommen, die Datei ist im Verzeichnis / usr / test verfügbar.

#!/usr/bin/perl

rename ("/usr/test/file1.txt", "/usr/test/file2.txt" );

Diese Funktion renames nimmt zwei Argumente und benennt nur die vorhandene Datei um.

Vorhandene Datei löschen

Hier ist ein Beispiel, das zeigt, wie eine Datei file1.txt mit dem gelöscht wird unlink Funktion.

#!/usr/bin/perl

unlink ("/usr/test/file1.txt");

Positionierung in einer Datei

Sie können verwenden, um tell Funktion, um die aktuelle Position einer Datei zu kennen und seek Funktion zum Zeigen einer bestimmten Position innerhalb der Datei.

Funktion mitteilen

Die erste Voraussetzung ist, Ihre Position in einer Datei zu finden, was Sie mit der Tell-Funktion tun -

tell FILEHANDLE
tell

Dies gibt die Position des Dateizeigers in Bytes innerhalb von FILEHANDLE zurück, falls angegeben, oder das aktuell standardmäßig ausgewählte Dateihandle, falls keines angegeben ist.

Funktion suchen

Die Suchfunktion positioniert den Dateizeiger auf die angegebene Anzahl von Bytes in einer Datei -

seek FILEHANDLE, POSITION, WHENCE

Die Funktion verwendet die fseek-Systemfunktion, und Sie haben die gleiche Fähigkeit, relativ zu drei verschiedenen Punkten zu positionieren: dem Start, dem Ende und der aktuellen Position. Sie tun dies, indem Sie einen Wert für WHENCE angeben.

Null legt die Position relativ zum Dateianfang fest. Beispielsweise setzt die Zeile den Dateizeiger auf das 256. Byte in der Datei.

seek DATA, 256, 0;

Dateiinformationen

Sie können bestimmte Funktionen in Perl sehr schnell mit einer Reihe von Testoperatoren testen, die zusammen als -X-Tests bezeichnet werden. Um beispielsweise einen schnellen Test der verschiedenen Berechtigungen für eine Datei durchzuführen, können Sie ein Skript wie das folgende verwenden:

#/usr/bin/perl

my $file = "/usr/test/file1.txt";
my (@description, $size);
if (-e $file) {
   push @description, 'binary' if (-B _);
   push @description, 'a socket' if (-S _);
   push @description, 'a text file' if (-T _);
   push @description, 'a block special file' if (-b _);
   push @description, 'a character special file' if (-c _);
   push @description, 'a directory' if (-d _);
   push @description, 'executable' if (-x _);
   push @description, (($size = -s _)) ? "$size bytes" : 'empty';
   print "$file is ", join(', ',@description),"\n";
}

Hier ist die Liste der Funktionen, die Sie für eine Datei oder ein Verzeichnis überprüfen können -

Sr.Nr. Operator & Definition
1

-A

Startzeit des Skripts abzüglich der letzten Zugriffszeit der Datei in Tagen.

2

-B

Ist es eine Binärdatei?

3

-C

Startzeit des Skripts abzüglich der letzten Inode-Änderungszeit der Datei in Tagen.

3

-M

Startzeit des Skripts abzüglich der Änderungszeit der Datei in Tagen.

4

-O

Ist die Datei im Besitz der realen Benutzer-ID?

5

-R

Ist die Datei für die reale Benutzer-ID oder die reale Gruppe lesbar?

6

-S

Ist die Datei ein Socket?

7

-T

Ist es eine Textdatei?

8

-W

Ist die Datei durch die reale Benutzer-ID oder die reale Gruppe beschreibbar?

9

-X

Ist die Datei mit der realen Benutzer-ID oder der realen Gruppe ausführbar?

10

-b

Ist es eine Block-Spezialdatei?

11

-c

Ist es eine spezielle Zeichendatei?

12

-d

Ist die Datei ein Verzeichnis?

13

-e

Existiert die Datei?

14

-f

Ist es eine einfache Datei?

15

-g

Hat die Datei das setgid-Bit gesetzt?

16

-k

Hat die Datei das Sticky-Bit gesetzt?

17

-l

Ist die Datei ein symbolischer Link?

18

-o

Ist die Datei im Besitz der effektiven Benutzer-ID?

19

-p

Ist die Datei eine Named Pipe?

20

-r

Ist die Datei für die effektive Benutzer- oder Gruppen-ID lesbar?

21

-s

Gibt die Größe der Datei zurück, Nullgröße = leere Datei.

22

-t

Wird das Dateihandle von einem TTY (Terminal) geöffnet?

23

-u

Hat die Datei das Setuid-Bit gesetzt?

24

-w

Ist die Datei durch die effektive Benutzer- oder Gruppen-ID beschreibbar?

25

-x

Ist die Datei durch die effektive Benutzer- oder Gruppen-ID ausführbar?

26

-z

Ist die Dateigröße Null?