UDF > File >


_FileReadToArray

Lit le fichier spécifié dans un tableau 1D ou 2D

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

Paramètres

$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

Valeur de retour

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é)

Remarques

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.

En relation

_FileWriteFromArray

Exemples

Exemple 1

#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


Exemple 2

#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