Perl verwendet eine Variable, die als Datei-Handle-Typ bezeichnet wird, um Dateien zu manipulieren.
Für das Lesen oder Schreiben von Daten aus einer Datei ist ein Dateihandle erforderlich.
Ein Dateihandle ist der Name einer E/A-Verbindung.
Perl bietet drei Dateihandles: STDIN, STDOUT und STDERR, die jeweils Standardeingabe, Standardausgabe und Standardfehlerausgabe darstellen.
Sie können Dateien in Perl mit den folgenden Methoden öffnen:
open FILEHANDLE, EXPRopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE
Parameterbeschreibung:
FILEHANDLE: Dateihandle, das zum Speichern einer eindeutigen Dateikennung verwendet wird.
EXPR: Ein Ausdruck bestehend aus Dateiname und Dateizugriffstyp.
MODE: Dateizugriffstyp.
PERMS: Zugriffsberechtigungsbits (Berechtigungsbits).
Im folgenden Code verwenden wir die Funktion open, um die Datei file.txt im schreibgeschützten Modus (<) zu öffnen:
open(DATA, "<file.txt");
< gibt den schreibgeschützten Modus an.
DATA im Code ist das Dateihandle, das zum Lesen der Datei verwendet wird. Das folgende Beispiel öffnet die Datei und gibt den Dateiinhalt aus:
Der folgende Code öffnet die Datei file.txt zum Schreiben ( > ):
open(DATA, ">file.txt") oder die "file.txt-Datei kann nicht geöffnet werden, $!";
> Gibt die Schreibmethode an.
Wenn Sie die Datei zum Lesen und Schreiben öffnen müssen, können Sie vor dem Zeichen > oder < ein +-Zeichen hinzufügen:
open(DATA, "+<file.txt"); oder die "file.txt-Datei kann nicht geöffnet werden, $!";
Bei dieser Methode wird der ursprüngliche Inhalt der Datei nicht gelöscht. Wenn Sie sie löschen möchten, lautet das Format wie folgt:
open DATA, „+>file.txt“ oder die „file.txt-Datei kann nicht geöffnet werden, $!“;
Wenn Sie Daten an eine Datei anhängen möchten, müssen Sie die Datei nur im Anhängemodus öffnen, bevor Sie die Daten anhängen:
open(DATA,">>file.txt") ||. die "file.txt-Datei kann nicht geöffnet werden, $!";
>> bedeutet das Anhängen von Daten an das Ende der vorhandenen Datei. Wenn Sie den Inhalt der anzuhängenden Datei lesen müssen, können Sie das +-Zeichen hinzufügen:
open(DATA,"+>>file.txt") ||. die "file.txt-Datei kann nicht geöffnet werden, $!";
In der folgenden Tabelle sind die verschiedenen Zugriffsmodi aufgeführt:
Modell | beschreiben |
---|---|
< oder r | Öffnen Sie im schreibgeschützten Modus und zeigen Sie mit dem Dateizeiger auf den Dateikopf. |
> oder w | Im Schreibmodus öffnen, den Dateizeiger auf den Dateiheader richten und die Dateigröße auf Null reduzieren. Wenn die Datei nicht vorhanden ist, versuchen Sie, sie zu erstellen. |
>> oder a | Öffnen Sie im Schreibmodus und zeigen Sie mit dem Dateizeiger auf das Ende der Datei. Wenn die Datei nicht vorhanden ist, versuchen Sie, sie zu erstellen. |
+< oder r+ | Öffnen Sie im Lese-/Schreibmodus und zeigen Sie mit dem Dateizeiger auf den Dateiheader. |
+> oder w+ | Im Lese-/Schreibmodus öffnen, den Dateizeiger auf den Dateiheader richten und die Dateigröße auf Null reduzieren. Wenn die Datei nicht vorhanden ist, versuchen Sie, sie zu erstellen. |
+>> oder a+ | Öffnen Sie im Lese-/Schreibmodus und zeigen Sie mit dem Dateizeiger auf das Ende der Datei. Wenn die Datei nicht vorhanden ist, versuchen Sie, sie zu erstellen. |
Die Sysopen- Funktion ähnelt der Open-Funktion, außer dass ihre Parameterformen unterschiedlich sind.
Das folgende Beispiel öffnet eine Datei zum Lesen und Schreiben (+<Dateiname):
sysopen(DATA, „file.txt“, O_RDWR);
Wenn Sie die Datei vor dem Aktualisieren löschen müssen, ist die Schreibmethode wie folgt:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
Sie können O_CREAT verwenden, um eine neue Datei zu erstellen. O_WRONLY ist der schreibgeschützte Modus und O_RDONLY ist der schreibgeschützte Modus.
Der PERMS -Parameter ist ein oktaler Attributwert, der die Berechtigungen nach der Dateierstellung angibt. Der Standardwert ist 0x666 .
In der folgenden Tabelle sind mögliche Moduswerte aufgeführt:
Modell | beschreiben |
---|---|
O_RDWR | Öffnen Sie im Lese-/Schreibmodus und zeigen Sie mit dem Dateizeiger auf den Dateiheader. |
O_RDONLY | Öffnen Sie im schreibgeschützten Modus und zeigen Sie mit dem Dateizeiger auf den Dateikopf. |
O_FALSCH | Im Schreibmodus öffnen, den Dateizeiger auf den Dateiheader richten und die Dateigröße auf Null reduzieren. Wenn die Datei nicht vorhanden ist, versuchen Sie, sie zu erstellen. |
O_CREAT | Datei erstellen |
O_APPEND | Datei anhängen |
O_TRUNC | Dateigröße auf Null kürzen |
O_EXCL | Wenn die Datei bei Verwendung von O_CREAT vorhanden ist, wird eine Fehlermeldung zurückgegeben. Es kann getestet werden, ob die Datei vorhanden ist. |
O_NONBLOCK | Durch nicht blockierende E/A kann unsere Operation entweder erfolgreich sein oder sofort einen Fehler zurückgeben, ohne blockiert zu werden. |
Nachdem die Datei verwendet wurde, muss die Datei geschlossen werden, um die dem Dateihandle zugeordneten Eingabe- und Ausgabepuffer zu aktualisieren. Die Syntax zum Schließen der Datei lautet wie folgt:
closeFILEHANDLEclose
FILEHANDLE ist das angegebene Dateihandle und gibt true zurück, wenn es erfolgreich geschlossen wurde.
close(DATA) ||. die „Datei kann nicht geschlossen werden“;
Es gibt verschiedene Möglichkeiten, Informationen in Dateien zu lesen und zu schreiben:
Die primäre Methode zum Lesen von Informationen aus einem geöffneten Dateihandle ist der Operator <FILEHANDLE>. In einem Skalarkontext wird eine einzelne Zeile aus dem Dateihandle zurückgegeben. Zum Beispiel:
Wenn wir den Operator <FILEHANDLE> verwenden, wird eine Liste jeder Zeile im Dateihandle zurückgegeben. Wir können beispielsweise alle Zeilen in ein Array importieren.
Implementieren Sie die Erstellung der Datei import.txt mit folgendem Inhalt:
$ cat import.txt 123
Lesen Sie import.txt und fügen Sie jede Zeile in das @lines-Array ein:
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
123
Die xgetc-Funktion gibt ein einzelnes Zeichen aus dem angegebenen FILEHANDLE oder STDIN zurück, wenn nicht angegeben:
getcFILEHANDLEgetc
Wenn ein Fehler auftritt oder sich das Dateihandle am Ende der Datei befindet, wird undef zurückgegeben.
Mit der Lesefunktion werden Informationen aus dem Dateihandle des Puffers gelesen.
Mit dieser Funktion werden Binärdaten aus einer Datei gelesen.
Lesen Sie FILEHANDLE, SCALAR, LENGTH, OFFSET. Lesen Sie FILEHANDLE, SCALAR, LENGTH
Parameterbeschreibung:
FILEHANDLE: Dateihandle, das zum Speichern einer eindeutigen Dateikennung verwendet wird.
SCALAR: Speichert das Ergebnis. Wenn OFFSET nicht angegeben ist, werden die Daten am Anfang von SCALAR platziert. Andernfalls werden die Daten nach dem OFFSET-Byte in SCALAR platziert.
LÄNGE: Die Länge des gelesenen Inhalts.
OFFSET: Offset.
Gibt die Anzahl der gelesenen Bytes zurück, wenn der Lesevorgang erfolgreich war, 0, wenn das Ende der Datei erreicht ist, und undef, wenn ein Fehler auftritt.
Für alle Funktionen, die Informationen aus Dateihandles lesen, ist die Hauptschreibfunktion im Backend print:
print FILEHANDLE LISTprint LISTprint
Die Ergebnisse der Programmausführung können über das Dateihandle und die Druckfunktion an das Ausgabegerät (STDOUT: Standardausgabe) gesendet werden, zum Beispiel:
print „Hallo Welt!n“;
Im folgenden Beispiel öffnen wir eine vorhandene Datei file1.txt, lesen jede Zeile davon und schreiben sie in die Datei file2.txt:
Im folgenden Beispiel benennen wir die vorhandene Datei file1.txt in file2.txt um und das angegebene Verzeichnis befindet sich unter /usr/codercto/test/:
#!/usr/bin/perlrename ("/usr/codercto/test/file1.txt", "/usr/codercto/test/file2.txt" );
Die Funktion renames akzeptiert nur zwei Parameter und benennt nur vorhandene Dateien um.
Das folgende Beispiel zeigt, wie Sie die Funktion zum Aufheben der Verknüpfung zum Löschen von Dateien verwenden:
Sie können den Speicherort einer Datei mithilfe der Tell -Funktion ermitteln und den Speicherort innerhalb der Datei mithilfe der Suchfunktion angeben:
Die Tell-Funktion wird verwendet, um den Dateispeicherort abzurufen:
sag es FILEHANDLEtell
Wenn FILEHANDLE angegeben ist, gibt diese Funktion die Position des Dateizeigers in Bytes zurück. Wenn nicht angegeben, wird das standardmäßig ausgewählte Dateihandle zurückgegeben.
Die Funktion „seek()“ liest oder schreibt Dateien, indem sie den Lese-/Schreibzeiger der Datei durch das Dateihandle bewegt, und liest und schreibt in Bytes:
Suchen Sie nach FILEHANDLE, POSITION, WHENCE
Parameterbeschreibung:
FILEHANDLE: Dateihandle, das zum Speichern einer eindeutigen Dateikennung verwendet wird.
POSITION: Gibt die Anzahl der Bytes an, die vom Dateihandle (Lese- und Schreibpositionszeiger) verschoben werden sollen.
WHENCE: Gibt die Startposition an, an der sich das Dateihandle (Lese-/Schreibpositionszeiger) zu bewegen beginnt. Die möglichen Werte sind 0, 1 und 2; sie geben den Anfang der Datei, die aktuelle Position und das Ende an Datei bzw.
Das folgende Beispiel liest 256 Bytes vom Anfang der Datei:
suche DATEN, 256, 0;
Perls Dateioperationen können auch zunächst testen, ob die Datei existiert, ob sie gelesen und geschrieben werden kann usw.
Wir können zunächst die Datei file1.txt wie folgt erstellen:
$ cat file1.txt www.codercto.com
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Datei1.txt-Informationen: ist eine Textdatei, 15 Bytes
Die Dateitestoperatoren sind in der folgenden Tabelle aufgeführt:
Operator | beschreiben |
---|---|
-A | Der Zeitpunkt des letzten Zugriffs auf die Datei (Einheit: Tage) |
-B | Handelt es sich um eine Binärdatei? |
-C | Änderungszeit des Indexknotens der Datei (Inode) (Einheit: Tage) |
-M | Der Zeitpunkt, zu dem die Datei zuletzt geändert wurde (Einheit: Tage) |
-O | Die Datei gehört der echten UID |
-R | Dateien oder Verzeichnisse können durch echte UID/GID gelesen werden |
-S | Für Steckdose (Steckdose) |
-T | Handelt es sich um eine Textdatei? |
-W | Dateien oder Verzeichnisse können mit echter UID/GID beschrieben werden |
-X | Dateien oder Verzeichnisse können mit echter UID/GID ausgeführt werden |
-B | Für blockspezifische (spezielle Block-)Dateien (z. B. gemountete Festplatten) |
-C | Für zeichenspezifische Dateien (Sonderzeichen) (z. B. E/A-Geräte) |
-D | für Verzeichnis |
-e | Der Datei- oder Verzeichnisname existiert |
-F | für gewöhnliche Dateien |
-G | Datei oder Verzeichnis hat das setgid-Attribut |
-k | Für die Datei oder das Verzeichnis ist das Sticky-Bit gesetzt |
-l | für symbolische Links |
-O | Die Datei gehört einer gültigen UID |
-P | Die Datei ist eine Named Pipe (FIFO) |
-R | Datei kann mit gültiger UID/GID gelesen werden |
-S | Die Datei oder das Verzeichnis existiert und ist nicht 0 (gibt die Anzahl der Bytes zurück) |
-T | Das Dateihandle ist TTY (Rückgabeergebnis der Systemfunktion isatty(); dieser Test kann nicht für Dateinamen verwendet werden) |
-u | Datei oder Verzeichnis hat das setuid-Attribut |
-w | Dateien können mit gültiger UID/GID beschrieben werden |
-X | Die Datei kann mit einer gültigen UID/GID ausgeführt werden |
-z | Die Datei ist vorhanden und die Größe ist 0 (das Verzeichnis ist immer falsch), dh es handelt sich um eine leere Datei. |