Page 1 sur 1
Problème avec _FileReadToArray()
Posté : ven. 07 avr. 2017 10:19
par Supernatural
Bonjour,
J'ai un problème avec la fonction _FileReadToArray().
Je souhaite que la fonction me retourne le fichier CSV dans un beau tableau ^^, pour cela j'utilise les options de la fonction mais elles ne fonctionne pas tout le temps...
Si j'enlève les option le fichier est bien lu mais pas mis en forme. Si quelqu'un a une idée? Merci
Re: Problème avec _FileReadToArray()
Posté : ven. 07 avr. 2017 19:18
par marcgforce
Bonsoir tu peux utiliser cette fonction qui marche super bien (je l'insère dans un exemple pour plus de clarté sur son fonctionnement) :
#include
<file
.au3>#include
<Array
.au3>$fileopen = FileOpenDialog("Ouvrir un fichier CSV",@ScriptDir,"Fichiers CSV (*.csv)", $FD_FILEMUSTEXIST ); ouverture du CSV Global $csv= $fileopen local $scsv = FileRead($csv) ; lecture $aarray= toArrayCsv
($scsv) ; traitement de la fonction _arraydisplay($aarray) ; pour debugFunc toArrayCsv
($s) Local $line = StringSplit($s,@CRLF,2+1) ; combien de ligne de mon fichier <> tableau Local $maxCol = 1 ; nombre de colonne de depart Local $a[UBound($line)][$maxCol] ; je crée un tableau de n ligne et de 1 colonne que je modifierai à ma guise For $i = 0 To UBound($line)-1 ; parcours toutes les lignes Local $tmp = StringSplit($line[$i],";",3) ; combien de colonnes pour la ligne n°i If(UBound($tmp) > $maxCol ) then $maxCol = UBound($tmp) ; pour connaitre le nombre de colonnes ReDim $a[UBound($line)][$maxCol] ; je redimensionne mon tableau aux bonnes dimensions For $j = 0 To UBound($tmp)-1 ; je parcours cellule par cellule "de gauche a droite" $a[$i][$j] = $tmp[$j] ; je remplis chaque cellule Next Next Return $aEndFunc
Re: Problème avec _FileReadToArray()
Posté : sam. 08 avr. 2017 18:39
par walkson
Bonjour,
Mais _FileReadToArray() fonctionne très bien. Il suffit de mettre le bon chemin et le bon nom du array
Re: Problème avec _FileReadToArray()
Posté : lun. 10 avr. 2017 11:41
par Supernatural
Salut,
Merci pour ta réponse ^^, désolé pour les fautes de frappe dans le code...
Je me suis aperçu en réalité, que si j'ai des cellules vides dans une colonne, la fonction ne me retourne rien contrairement à la même fonction sans "options"...
Exemple:
_FileReadToArray("MonFichierCSV", $aArray, 0, ";") ne me retourne rien alors que
_FileReadToArray("MonFichierCSV", $aArray) me retourne bien le contenu du fichier mais pas sous forme d'array...
Re: Problème avec _FileReadToArray()
Posté : lun. 10 avr. 2017 13:35
par walkson
Bonjour,
Il semblerait que ce soit votre CSV qui pose problème, nombre de colonnes irrégulier.
Lancez ce petit code ci dessous, il vous indiquera où sont les erreurs. En affichant le CSV dans Scite, vous pouvez vérifier le nombre de ";" dans les lignes qui posent problème.
Et si votre espace est écrit comme "aa;bb;cc; ;ee" il n-y a aucun problème pour _FileReadToArray tant que le nb de colonnes est respecté (5 ici)
Re: Problème avec _FileReadToArray()
Posté : lun. 10 avr. 2017 15:37
par Supernatural
Ok merci, je viens de tester et effectivement j'ai bien une "pseudo" erreur dans mon fichier csv.
En effet, j'ai une valeur dans une ou plusieurs cellule(s) qui commence(nt) par un ";" donc... ça fait planter la fonction...
Maintenant c'est comment y remédier....? Un StringReplace?
Re: Problème avec _FileReadToArray()
Posté : lun. 10 avr. 2017 17:14
par mikell
S'il y a des valeurs qui contiennent le délimiteur, t'es pas arrivé...
Solution 1 (crade, parce qu'on peut trouver un ";;" correct en cas de cellule vide)
Code : Tout sélectionner
$txt = FileRead(@ScriptDir & "\fichier.csv")
$txt = StringReplace($txt, ";;", ";")
FileWrite(@ScriptDir & "\temp.csv", $txt)
_FileReadToArray(@ScriptDir & "\temp.csv", $aArray, 0, ";")
;etc
Solution 2 (propre)
Changer de délimiteur dans le csv, en mettant par exemple "|"
Solution 3 (plus compliquée)
Mettre les valeurs qui contiennent le délimiteur entre guillemets, et trouver une autre fonction de lecture de csv qui sait gérer ça