Um bei der Datei-E/A Daten aus einer Datei (Linux-Dateihandle) zu lesen, muss die Anwendung zunächst die Betriebssystemfunktion aufrufen, den Dateinamen übergeben und einen Pfad zur Datei auswählen, um die Datei zu öffnen. Diese Funktion gibt eine Sequenznummer zurück, bei der es sich um das Perl-Dateihandle (Dateihandle) (Linux-Dateihandle) handelt. Das Perl-Dateihandle ist die einzige Grundlage für die Identifizierung der geöffneten Datei. Um ein Datenelement aus einer Datei zu lesen, muss die Anwendung die Funktion ReadFile aufrufen und die Adresse des Perl-Dateihandles im Videospeicher sowie die Anzahl der zu kopierenden Bytes an das Betriebssystem übertragen. Wenn die Aufgabe abgeschlossen ist, wird die Datei durch Aufruf einer Systemfunktion geschlossen. Sie schreiben nicht nur ein Programm für künstliche Intelligenz, das einen solipsistischen Philosophen imitiert, Ihr Programm verwendet auch eine Methode, die nicht mit der Außenwelt kommuniziert. In der dritten und vierten Zeile des Klassenbeispiels sehen Sie „GRADES“, einen Datentyp, der auf eine andere Perl-Datei verweist, die als Dateihandle bezeichnet wird. Ein Handle ist ein Name, den Sie einer Datei, einem Gerät, einem Socket oder einer Pipeline geben, um Ihnen zu helfen, sich an den Namen zu erinnern, mit dem Sie arbeiten, und um die Komplexität einzelner Caches usw. zu verbergen. (Intern ähneln Handles Streams in C++ oder I/O-Kanälen in BASIC.) Handles erleichtern Ihnen die Eingabe und Ausgabe an verschiedenen Orten. Eines der Dinge, die Perl zu einer guten Sprache machen, ist seine Fähigkeit, mit mehreren Dateien zu kommunizieren und sie alle gleichzeitig zu verarbeiten. Gute symbolische Namen für externe Objekte zu haben, ist ein wesentlicher Bestandteil einer guten Sprache [1]. Andere Dinge, die Perl zu einer guten Sprache machen, sind: Es ist 8-Bit, es ist einbettbar und Sie können andere Programme über den Erweiterungsmodus in Perl einbetten. Es ist prägnant und einfach im Internet zu verwenden. Die Umgebung ist klar und leicht zu erreichen. Sie können auf viele verschiedene Arten darauf verweisen (wie oben gezeigt). Tatsächlich ist die Sprache selbst nicht so streng strukturiert, dass Sie nicht über Ihre Frage hinauskommen. Noch einmal zurück zu TMTOWTDI.
Sie erstellen ein Handle und verbinden es über die Öffnungsfunktion mit einer Datei. open benötigt zwei Parameter: das Handle und den Namen einer Datei, mit der Sie einen Link erstellen möchten. Perl bietet auch einige vordefinierte (und vorab geöffnete) Handles. STDIN ist der normale Eingabekanal Ihres Programms und STDOUT ist der normale Ausgabekanal Ihres Programms. STDERR ist ein zusätzlicher Ausgabekanal, damit das Programm einige Anweisungen beim Konvertieren von Eingaben in Ausgaben geben kann [2].
Normalerweise sind diese Handles mit Ihrem Terminal verknüpft, sodass Sie Ihr Programm eingeben und sehen können, sie können aber auch mit Dateien verknüpft sein. Perl kann Ihnen dieses vordefinierte Handle geben, da Ihr Betriebssystem es bereits bereitstellt. Unter UNIX erbt ein Prozess Standardeingaben, -ausgaben und -fehler von seinem übergeordneten Prozess (normalerweise einer Shell). Eine der Aufgaben einer Shell besteht darin, diesen I/O-Stream so zu strukturieren, dass sich untergeordnete Prozesse nicht darum kümmern müssen.
Da Sie mit der Open-Funktion Handles für verschiedene Zwecke (Eingabe, Ausgabe, Pipeline) erstellen können, müssen Sie angeben können, was Sie tun möchten. Genau wie in der UNIX-Befehlszeile fügen Sie dem Dateinamen einfach Zeichen hinzu.
Kopieren Sie den Code wie folgt:
open(SESAME,"filename");#Aus einer vorhandenen Datei lesen
open(SESAME,"open(SESAME,">filename");#Erstellen Sie eine Datei und schreiben Sie darauf
open(SESAME,">>filename");#Schreiben Sie weiter in die vorhandene Datei
open(SESAME,"|output-pipe-command");#Erstellen Sie einen Ausgabefilter
open(SESAME,"input-pipe-command|");#Einen Eingabefilter erstellen
Wie Sie gehört haben, können Sie einen beliebigen Namen wählen. Sobald ein SESAME-Handle geöffnet ist, kann es für den Zugriff auf Dateien oder Pipes verwendet werden, bis es explizit geschlossen wird (mit close(SESAME)) oder eine Reihe von Öffnungen für dasselbe Handle dieses Handle mit einer anderen Datei verknüpft [3 ].
Durch das Öffnen eines bereits geöffneten Handles wird implizit die erste Datei geschlossen, sodass sie für das Perl-Dateihandle nicht mehr verfügbar ist, und eine andere Datei geöffnet. Sie müssen sich darüber im Klaren sein, dass Sie dies wirklich tun möchten. Manchmal kommt es vor, dass Linux-Download-Tools zufällig auftreten. Wenn Sie beispielsweise ($handle,$file) öffnen, enthält $handle zufällig eine leere Zeichenfolge (null). Stellen Sie sicher, dass $handle auf einen einzelnen Wert gesetzt ist, sonst öffnen Sie eine neue Datei mit einem Null-Handle.
Sobald Sie ein Handle zur Eingabe geöffnet haben (oder STDIN verwenden), können Sie mit der „Zeilenleseoperation“ eine Zeile lesen. Aufgrund seiner Form wird dieser Vorgang auch als Maurerbetrieb bezeichnet. Diese Mauerwerksoperation enthält das handle()[4], das Sie lesen möchten. Verwenden Sie das STDID-Handle, um die vom Benutzer bereitgestellte Antwort wie folgt zu lesen:
Der Vorgang „Empty Masonry“ liest aus allen in der Befehlszeile angegebenen Dateien. Wenn nicht angegeben, wird aus STDIN gelesen. (Dies ist das Standardverhalten vieler UNIX-„Filter“-Programme)
Kopieren Sie den Code wie folgt:
printSTDOUT"Enteranumber:";#Aufforderung zur Eingabe einer Nummer
$number=;#Geben Sie eine Zahl ein
printSTDOUT"Thenumberis$number";#Diese Nummer ausgeben
Verstehen Sie das Beispiel, das wir Ihnen gegeben haben? Was macht STDOUT im Drucksatz? Dies ist eine der Möglichkeiten, wie Sie einen Ausgabehandler verwenden. Ein Handle kann als erster Parameter der print-Anweisung verwendet werden. Wenn es vorhanden ist, gibt es an, wo ausgegeben werden soll. Im Beispiel ist das Handle überflüssig, da die Ausgabe bereits STDOUT ist. Der Standardwert für die Eingabe ist STDIN und für die Ausgabe STDOUT. (Wir haben Zeile 18 des Gegenbeispiels der Klasse weggelassen, um Sie nicht zu verwirren.)
Wir haben auch eine Sache, die Sie nicht verstehen. Wenn Sie das darin enthaltene Beispiel ausprobieren, werden Sie feststellen, dass Sie eine sehr leere Zeile erhalten. Weil Sie beim Lesen das Zeilenumbruchzeichen (Newline) nicht manuell aus Ihrer Eingabezeile entfernt haben (Sie haben beispielsweise „9“ eingegeben). Für diesen Fall, wenn Sie Zeilenumbrüche entfernen möchten, stellt Perl die Funktionen Chop und Chomp bereit. Chop löscht wahllos das zuletzt übergebene Zeichen (und gibt es zurück), während chomp nur das Ende der Datensatzkennung (normalerweise „“) löscht und die Anzahl der so gelöschten Zeichen zurückgibt.
Das obige ist der detaillierte Inhalt vonUm Daten aus einer Datei zu lesen, ruft die Anwendung zunächst eine Betriebssystemfunktion auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!