Funktionreferenz


_FileReadToArray

Beschreibung anzeigen in

Liest die angegebene Datei in ein 1D oder 2D Array ein

#include <File.au3>
_FileReadToArray ( $sFilePath, ByRef $vReturn [, $iFlags = $FRTA_COUNT [, $sDelimiter = ""]] )

Parameter

$sFilePath Pfad und Name der einzulesenden Datei.
$vReturn Variable um die zurückgegebenen Daten zu speichern - muss kein Array sein
$iFlags [optional] Falls notwendig können mehrere Werte addiert werden
$FRTA_NOCOUNT (0) - Array ist 0-basierend. Um die Größe zu ermitteln ist UBound() zu verwenden
$FRTA_COUNT (1) - Arrayanzahl im ersten Element. (Standard)
$FRTA_INTARRAYS (2) - Erstellt ein "Array von Arrays" - Siehe Bemerkungen
$FRTA_ENTIRESPLIT (4) - Verwendet den kompletten Trennzeichen-String als Trennzeichen (Standard ist, dass jedes Zeichen eine Trennstelle erzeugt)
$sDelimiter [optional]
Wird verwendet um jede Zeile weiter zu teilen - z. B. das einlesen von CSV-Dateien in ein 2D-Array

Rückgabewert

Erfolg: 1 und $vReturn enthält ein Array
Fehler: 0, setzt das @error Flag auf ungleich null und $vReturn wird auf 0 gesetzt.
@Error: 1 - Fehler beim Öffnen der angegebenen Datei
2 - unmöglich die Datei zu splitten
3 - die Zeilen der Datei haben eine unterschiedliche Anzahl von Feldern (nur wenn das $FRTA_INTARRAYS Flag nicht gesetzt wurde)
4 - kein Trennzeichen gefunden (nur wenn das $FRTA_INTARRAYS Flag nicht gesetzt wurde)

Bemerkungen

Wenn ein Trennzeichen nicht angegeben ist, gibt die Funktion ein 1D-Array zurück, wobei jedes Element eine Zeile der Datei enthält. Zeilenendungen können beliebige Mischungen von @CR, @LF und @CRLF sein.

Wenn ein Trennzeichen angegeben ist, versucht die Funktion, jede Zeile der Datei weiter zu teilen. Wie dies geschieht, hängt von der Einstellung des Flags $FRTA_INTARRAYS ab. Wenn das Flag nicht gesetzt ist und jede Zeile die gleiche Anzahl von Feldern hat, die durch das Trennzeichen aufgeteilt werden, dann wird ein 2D-Array erstellt, aber wenn dies nicht der Fall ist, dann ist @error auf 3 gesetzt und kein Array wird zurückgegeben. Wenn das Flag $FRTA_INTARRAYS gesetzt ist, erzeugt die Funktion ein 1D-Array, bei dem jedes Element ein weiteres Array ist, das die Felder der Zeile bei dem Trennzeichen aufteilt. Die Zeilen müssen nicht die gleiche Anzahl von Feldern haben. Siehe Beispiel unten.

Wenn das Trennzeichen mehr als ein einzelnes Zeichen ist, bestimmt die Variable $FRTA_ENTIRESPLIT die Trennmethode.


Im Zusammenspiel mit der Funktion IniRead kann man auch die url einer mit dem Internet Explorer gespeicherten Internetseite herausfinden.
Dies geht so:
IniRead(C:\test.url, "InternetShortcut", "URL", "")
Es lassen sich noch mehr Infos auslesen.
Welche Infos die gespeicherte url enthält kann man über _FileReadToArray ermitteln.

Verwandte Funktionen

_FileWriteFromArray

Beispiel

Beispiel 1

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $aRetArray, $sFilePath = @TempDir & "\Test.txt"

    ; Erstellt ein  1D Array
    Local $aArray[] = ["0", "1", "2", "3", "4"]
    ; Schreibt es in die Datei
    _FileWriteFromArray($sFilePath, $aArray, Default, Default, @CRLF)
    Sleep(1000)

    ; Erneutes lesen, diesmal mit der Anzahl
    _FileReadToArray($sFilePath, $aRetArray)
    _ArrayDisplay($aRetArray, "1D Array - Anzahl", Default, 8)

    ; Erneutes lesen, diesmal ohne die Anzahl
    _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT)
    _ArrayDisplay($aRetArray, "1D Array - keine Anzahl", Default, 8)

    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    ; erstellt ein "quadratisches" 2D Array
    Local $aArray[][] = [ _
            ["00", "01", "02", "03"], _
            ["10", "11", "12", "13"], _
            ["20", "21", "22", "23"], _
            ["30", "31", "32", "33"]]
    _ArrayDisplay($aArray, "Original", Default, 8)
    ; Schreibt es in die Datei
    _FileWriteFromArray($sFilePath, $aArray, Default, Default, ",")
    Sleep(1000)

    ; Erneutes lesen, diesmal mit der Anzahl
    _FileReadToArray($sFilePath, $aRetArray, Default, ",")
    _ArrayDisplay($aRetArray, "2D Array - Anzahl", Default, 8)

    ; Erneutes lesen, diesmal ohne die Anzahl
    _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT, ",")
    _ArrayDisplay($aRetArray, "2D Array - keine Anzahl", Default, 8)

    ; Lesen in "Array von Arrays" mit der Anzahk
    _FileReadToArray($sFilePath, $aRetArray, $FRTA_COUNT + $FRTA_INTARRAYS, ",")
    _ArrayDisplay($aRetArray, "Array von Arrays - Anzahl", Default, 8)
    ; Nun wird in die Arrays innerhalb des zurückgegebenen Arrays geschaut
    _ArrayDisplay($aRetArray[1], "Array 1 innerhalb RetArray - Anzahl", Default, 8)

    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    ; Erneutes schreiben des 2D Arrays mit mehreren Trennzeichen
    _FileWriteFromArray($sFilePath, $aArray, Default, Default, ":|")
    Sleep(1000)

    ; Erneutes lesen, diesmal fungiert jedes Trennzeichen als Trennpunkt
    _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT, ":|")
    _ArrayDisplay($aRetArray, "Trennen bei jedem Zeichen", Default, 8)

    ; Erneutes lesen, diesmal fungiert der komplette String des Trennzeichens als Trennpunkt
    _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT + $FRTA_ENTIRESPLIT, ":|")
    _ArrayDisplay($aRetArray, "Trennzeichen beim kompletten Trennzeichen", Default, 8)

    FileDelete($sFilePath)
EndFunc   ;==>Example

Beispiel 2

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    ; Definiert eine Variable um diese an _FileReadToArray zu übergeben.
    Local $aArray = 0

    ; Liest die aktuelle Skriptdatei in ein Array ein. Dabei wird die zuvor definierte Variable verwendet.
    ; $iFlag wird mit 0 festgelegt, so dass die Arrayanzahl nicht angezeigt wird. Es ist UBound() zu verwenden um die Größe des Arrays zu ermitteln.
    If Not _FileReadToArray(@ScriptFullPath, $aArray, 0) Then
        MsgBox($MB_SYSTEMMODAL, "", "Beim lesen der Datei ist ein Fehler aufgetreten. @error: " & @error) ; Beim lesen der aktuellen Skriptdatei ist ein Fehler aufgetreten.
    EndIf

    ; Zeigt das Array in _ArrayDisplay.
    _ArrayDisplay($aArray)
EndFunc   ;==>Example