Lit le fichier spécifié dans un tableau 1D ou 2D
#include <File.au3>
_FileReadToArray ( $sFilePath, ByRef $vReturn [, $iFlags = $FRTA_COUNT [, $sDelimiter = ""]] )
$sFilePath | Chemin et nom du fichier à lire. |
$vReturn | Variable qui contiendra les données retournées - pas nécessairement un tableau. |
$iFlags |
[optionnel] Ajoutez plusieurs valeurs, autant que nécessaire: $FRTA_NOCOUNT (0) - le tableau est indexé à partir de 0, utilisez UBound() pour obtenir sa taille $FRTA_COUNT (1) - le nombre d'éléments est dans le premier élément. (par défaut) $FRTA_INTARRAYS (2) - Crée un "tableau de tableau" - voir Remarques $FRTA_ENTIRESPLIT (4) - Utilise une chaîne avec délimiteurs comme point de partage (par défaut chaque caractère définit un point de partage) |
$sDelimiter | [optionnel] Utilisé pour diviser davantage chaque ligne du fichier - par exemple la lecture des fichiers CSV dans un tableau 2D |
Succès: | Retourne 1 et $vReturn qui contient le tableau. |
Échec: | Retourne 0, et définit @error <> 0 et $vReturn = 0. |
@error: | 1 - Erreur d'ouverture du fichier 2 - Impossible de scinder le fichier 3 - Les lignes du fichier ont des nombres différents de champs (seulement si le flag $FRTA_INTARRAYS n'est pas levé) 4 - Aucun délimiteur trouvé (seulement si le flag $FRTA_INTARRAYS n'est pas levé) |
Si le délimiteur n'est pas spécifié, la fonction retourne un tableau 1D dans lequel chaque élément contient une ligne du fichier - les terminaisons de ligne peuvent être n'importe quelle combinaison de @CR, @LF et @CRLF.
Lorsqu'un délimiteur est spécifié la fonction essaie de diviser davantage chaque ligne du fichier - la façon dont elle procède dépend de la position du flag $FRTA_INTARRAYS.
Si le flag n'est pas levé et si chaque ligne a le même nombre de champs séparées par le délimiteur alors un tableau 2D est créé, mais si ce n'est pas le cas, alors @error est défini à 3 et aucun tableau n'est retourné.
Si le flag $FRTA_INTARRAYS est levé la fonction crée un tableau 1D où chaque élément est un autre tableau contenant les champs de la ligne éclatée suivant le délimiteur - les lignes n'ont pas besoin d'avoir le même nombre de champs. Voir l'exemple ci-dessous.
Si le délimiteur comprend plusieurs caractères, alors le flag $FRTA_ENTIRESPLIT détermine la méthode d'éclatement.
#include <Array.au3> #include <File.au3> #include <MsgBoxConstants.au3> Example() Func Example() Local $aRetArray, $sFilePath = @TempDir & "\Test.txt" ; Crée un tableau 1D Local $aArray[] = ["0", "1", "2", "3", "4"] ; Ecrit dans le fichier _FileWriteFromArray($sFilePath, $aArray, Default, Default, @CRLF) Sleep(1000) ; Le relit - avec compteur _FileReadToArray($sFilePath, $aRetArray) _ArrayDisplay($aRetArray, "Tableau 1D avec compteur", Default, 8) ; Le relit sans compteur _FileReadToArray($sFilePath,$aRetArray, $FRTA_NOCOUNT) _ArrayDisplay($aRetArray, "Tableau 1D - sans compteur", Default, 8) ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; Crée un tableau "carré" 2D Local $aArray[][] = [ _ ["00", "01", "02", "03"], _ ["10", "11", "12", "13"], _ ["20", "21", "22", "23"], _ ["30", "31", "32", "33"]] _ArrayDisplay($aArray, "Original", Default, 8) ; Ecrit dans le fichier _FileWriteFromArray($sFilePath, $aArray, Default, Default, ",") Sleep(1000) ; Le relit - avec compteur _FileReadToArray($sFilePath, $aRetArray, Default, ",") _ArrayDisplay($aRetArray, "Tableau 2D - avec compteur", Default, 8) ; Le relit - sans compteur _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT, ",") _ArrayDisplay($aRetArray, "Tableau 2D - sans compteur", Default, 8) ; Lit dans le "tableau de tableaux" sans compteur _FileReadToArray($sFilePath, $aRetArray, $FRTA_COUNT + $FRTA_INTARRAYS, ",") _ArrayDisplay($aRetArray, "Tableau de tableaux - avec compteur", Default, 8) ; Maintenant, regarde à l'intérieur du tableau de tableau retourné _ArrayDisplay($aRetArray[1], "Tableau 1 dans RetArray - avec compteur", Default, 8) ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ; Réécrit un tableau 2D avec plusieurs délimiteurs _FileWriteFromArray($sFilePath, $aArray, Default, Default, ":|") Sleep(1000) ; Relit en considérant chaque délimiteur comme un point de scission _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT, ":|") _ArrayDisplay($aRetArray, "Eclate sur chaque caractère", Default, 8) ; Relit en considérant l'ensemble des délimiteurs comme point de scission _FileReadToArray($sFilePath, $aRetArray, $FRTA_NOCOUNT + $FRTA_ENTIRESPLIT, ":|") _ArrayDisplay($aRetArray, "Eclate sur l'ensemble des caractères", Default, 8) FileDelete($sFilePath) EndFunc ;==>Example
#include <Array.au3> #include <File.au3> #include <MsgBoxConstants.au3> Example() Func Example() ; Définit une variable pour passer à _FileReadToArray. Local $aArray = 0 ; Lit le fichier script courant dans un tableau en utilisant la variable définie précédemment. ; $iFlag est définie à 0, le nombre d'éléments du tableau ne sera pas défini. Utilisez UBound() pour trouver la taille du tableau. If Not _FileReadToArray(@ScriptFullPath, $aArray, 0) Then MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue lors de la lecture du fichier. @error: " & @error) ; Une erreur s'est produite en lecture du fichier du script courant. EndIf ; Affiche le tableau avec la fonction _ArrayDisplay. _ArrayDisplay($aArray) EndFunc ;==>Example