Liest die angegebene Datei in ein 1D oder 2D Array ein
#include <File.au3>
_FileReadToArray ( $sFilePath, ByRef $vReturn [, $iFlags = $FRTA_COUNT [, $sDelimiter = ""]] )
$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 |
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) |
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.
#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
#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