Von Datendatei lesen

Liest Daten aus einer offenen Datendatei.

Optionen 

  • DateiID ist ein numerischer Ausdruck, der die DateiID einer geöffneten Datendatei angibt. Weitere Informationen finden Sie unter Scriptschritt „Datendatei öffnen“.
  • Umfang gibt die Anzahl der zu lesenden Bytes an, wenn Lesen als auf UTF-8 oder Bytes eingestellt ist. Für UTF-16 bezeichnet Umfang die Anzahl der zu lesenden Unicode-Code-. Wenn Umfang nicht angegeben wird (auf keinen Wert eingestellt ist), wird die vollständige Datei gelesen.
  • Ziel ist das Feld oder die Variable zum Speichern der Daten, die aus der Datei gelesen werden.
  • Lesen als gibt die Zeichenkodierung der Datei an.
    • UTF-16 ist die die standardmäßige FileMaker-Zeichenkodierung für 16-Bit-Unicode (UTF-16 little endian).
    • UTF-8 ist 8-Bit-Unicode-Zeichenkodierung.
    • Bytes setzt keine bestimmte Zeichenkodierung voraus, sondern liest ein Byte nach dem anderen. Wenn das Ziel eine Variable oder ein Containerfeld ist, werden aus der Datei gelesene Daten als Containerdaten unter demselben Dateinamen wie die angegebene Datei gespeichert.

Kompatibilität 

Produkt Unterstützt
FileMaker Pro Ja
FileMaker Go Ja
FileMaker WebDirect Nein
FileMaker Server Ja
FileMaker Cloud Ja
FileMaker Data API Nein
Custom Web Publishing Ja

Ursprung in Version 

18.0

Beschreibung 

Dieser Scriptschritt liest die durch Umfang angegebenen Daten ab der aktuellen Lese-Schreib-Position bzw. liest die ganze Datei, wenn Umfang nicht angegeben ist. Weitere Informationen finden Sie unter Datendateiposition setzen.

Der maximale Umfang an Daten, den dieser Scriptschritt gleichzeitig lesen kann, beträgt 64 MB. Wenn die Datei größer als 64 MB ist, können Sie diesen Scriptschritt mehrmals ausführen, um jedesmal einen Umfang von maximal 64 MB zu lesen.

Hinweise 

  • Die Leistung ist am besten, wenn nicht mehr als 64 MB gelesen werden.
  • Beim Lesen von Unicode-Text aus einem Teil der Datei wird möglicherweise nur ein Teil eines Zeichens gelesen, wenn das Zeichen aus mehreren Codeeinheiten besteht. Wenn Sie voraussichtlich Text aus einer UTF-8- oder UTF-16-Datei lesen, kann es sicherer sein, die ganze Datei auf einmal zu lesen – es sei denn, Sie kennen die Anzahl der Codepunkte pro Zeichen genau.

Beispiel 1 

Liest den Inhalt einer geöffneten Datei mit einer DateiID von 2 und speichert die Daten in einer Variablen.

Kopieren
Von Datendatei lesen [ DateiID: 2; Umfang (Bytes): ; Ziel: $Variable; Lesen als: Bytes ]

Beispiel 2 

Prüft, ob eine Datei mit dem Namen change.log im Ordner „Dokumente“ vorhanden ist. Wenn ja, werden die ersten 100 UTF-8-Code-Einheiten in das Textfeld Versorgung::Protokolleintrag geschrieben.

Kopieren
Variable setzen [$Datei ; Wert: Hole ( DokumentenPfad ) & "change.log" ]
Dateiexistenz holen [ "$Datei"; Ziel: $DateiExistiert ]
Wenn [ nicht $DateiExistiert ]
    Aktuelles Script verlassen [ Textergebnis: ]
Ende (wenn)
Datendatei öffnen [ "$Datei"; Ziel: $DateiID ]
Von Datendatei lesen [ DateiID: $DateiID; Umfang (Bytes): 100; Ziel: Versorgung::Protokolleintrag; Lesen als: UTF-8 ]
Datendatei schließen [ DateiID: $DateiID ]

Beispiel 3 

Wenn die Datei groß.log existiert und groß ist, wird die Datei mit jeweils 64 MB in eine Variable gelesen, bis die ganze Datei gelesen wurde. Wenn die Datei kleiner ist, wird die ganze Datei in einem Vorgang gelesen. Daten werden für eine bessere Leistung in eine Variable gelesen und anschließend in einem Feld gespeichert.

Kopieren
Fehleraufzeichnung setzen [Ein]
Variable setzen [$k_DateiFehltFehler; Wert: 100 ] 
Variable setzen [$k_DateiEndeFehler; Wert: 10 ]
Variable setzen [$k_64KB; Wert: 64 * 1024 ]
Variable setzen [$k_64MB; Wert: 64 * 1024 * 1024 ]
Variable setzen [$Datei ; Wert: "groß.log" ]
Dateiexistenz holen ["$Datei"; Ziel: $DateiExistiert ]
Wenn [$DateiExistiert = 0 ]
    Aktuelles Script verlassen [ Ergebnis: $k_DateiFehltFehler ]
Ende (wenn)

Datendatei öffnen [ "$Datei"; Ziel: $DateiID ] 

#Liest den Inhalt, wenn die Datei erfolgreich geöffnet wurde.
Wenn [Hole ( LetzteFehlerNr ) = 0]
    Dateigröße holen [ "$Datei"; Ziel: $Dateigröße ]

    #Wenn die Datei größer als 64 MB ist, wird sie schrittweise zu je 64 MB gelesen.
    Wenn [ $Dateigröße > $k_64MB ]

        Schleife (Anfang)
            #Bis 64 MB lesen und in einer Variablen speichern.
            Von Datendatei lesen [ DateiID: $DateiID; Umfang (Bytes): $k_64MB; Ziel: $Datenteil; Lesen als: UTF-8 ]
            Variable setzen [ $LeseFehler; Wert:Hole ( LetzteFehlerNr ) ]

            #Wenn der Lesevorgang erfolgreich war oder das Ende der Datei erreicht wurde, die in diesem Durchgang gelesenen Daten ($Datenteil) mit den zuvor gelesenen Daten ($Dateiinhalt) verketten.
            Wenn [ ( $LeseFehler = 0 ) oder ( $LeseFehler = $k_Dateiende-Fehler ) ]
                Variable setzen [ $Dateiinhalt; Wert: $Dateiinhalt & $Datenteil ]
            Ende (wenn)

            #Schleife verlassen, sobald der Lesevorgang fehlschlägt oder das Dateiende erreicht ist.
            Verlasse Schleife wenn [ $LeseFehler ]
        Schleife (Ende)

    Sonst
        #Wenn die Datei nicht größer als 64 MB ist, wird sie in einem Durchgang gelesen.
        Von Datendatei lesen [ DateiID: $DateiID; Ziel: $Dateiinhalt; Lesen als: UTF-8 ]
    Ende (wenn)

    #Die Datendatei schließen und den Inhalt in einem Feld speichern.
    Datendatei schließen [ DateiID: $DateiID ]
    Feldwert setzen [ Tabelle::Daten; $Dateiinhalt ]

Ende (wenn)