Page 1 sur 1
[R] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 10:12
par clark17
Bonjour,
J'ai un petit problème mineur avec la fonction FileWritefromArray. J'utilise ce code pour lire dans un binaire et exporter des valeurs dans un csv:
► Afficher le textetext
#Include <Array.au3>
#include<File.au3>
;Ouverture du fichier et mise dans un tableau
$fichier_a_ouvrir = "1STD.SET"
$fichier = FileOpen($fichier_a_ouvrir, 16)
$tableau_fichier = StringRegExp(FileRead($fichier), '[[:xdigit:]]{2}', 3)
FileClose($fichier)
;Declaration des variables pour les noms des entreprises
$debut_nom = 17712
$longueur_fullname = 39
$longueur_shortname = 15
$nombre_entreprise = 35
$longueur_csv = $nombre_entreprise + 1
Dim $csv[$longueur_csv] = ["FULL NAME (max 39 characters);SHORT NAME (max 15 characters);COLOR ID (1 character, no ideas what is it!)"]
;Assignation de $i au début des noms d'entreprises
$i = $debut_nom
;Récupération du noms des entreprises
For $y = 1 to $nombre_entreprise
$ligne = ""
;Récupération du FULLNAME
For $i = $i to $i + $longueur_fullname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du SHORTNAME
For $i = $i to $i + $longueur_shortname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du Color_ID
$ligne &= Chr("0x" & $tableau_fichier[$i])
$i = $i + 11
$ligne = StringStripWS($ligne, 2)
;Assignation du mot dans un tableau pour export en csv
$csv[$y] = $ligne
Next
;Exportation du tableau dans un fichier csv
_ArrayDisplay($csv)
_FileWriteFromArray("corporation.csv", $csv)
Ça fonctionne bien par contre le csv exporté contient 36 lignes la où il ne devrait en faire que 35. En fait il y a les 35 lignes correctement composées avec mes valeurs et une 36 ligne vide mais bien présente. Pourtant mon tableau $csv contient bien 35 ligne et pas 36... Ca me pose un tout petit problème quand je fait l'inverse car je retrouve avec un tableau de 36 ligne dont la dernière vide.
Si quelqu'un à une réponse je suis preneur!
Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 10:15
par ani
$nombre_entreprise = 35
$longueur_csv = $nombre_entreprise + 1 < ca donne 36

donc la evidement ligne vide ^^'
Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 10:24
par clark17
En fait non car mon array csv commence à 0 avec la desciption du csv (Dim $csv[$longueur_csv] = ["FULL NAME (max 39 characters);SHORT NAME (max 15 characters);COLOR ID (1 character, no ideas what is it!)"])
Si c'était ca mon tableau que j'affiche avec _arraydisplay contiendrait une ligne 36 vide or, ce n'est pas le cas il s'arrête à la ligne 35.
Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 10:42
par ani
et si tu indique comme troisième parametre 1, çà change la donne ?
je cherche té message pour tester
y a quelque truc avec té variable
genre $i tu lui dit quel vaut debut_nom = 17712
mais dans l'intruction For tu note
For
$i = $i to $i
change là en $x exemple c'un avis perso

Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 11:01
par clark17
Voici un lien pour le fichier 1STD.SET ->
http://mickael.duval2.free.fr/capitalis ... e/1STD.SET
Si tu veux tester le code en entier j'ai ouvert un petit github:
https://github.com/clark17/Name_patcher_capitalismlab
Merci à toi pour ton aide!
Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 14:35
par mikell
Un rapide coup d'oeil dans l'include montre que _FileWriteFromArray rajoute un @crlf en fin de chaque ligne, donc pour la dernière tu as un renvoi sur une ligne vide
Donc faut virer le dernier @crlf du fichier en toute fin de script, par exemple :
Code : Tout sélectionner
$txt = FileRead("corporation.csv")
$file = FileOpen("corporation.csv", 2)
FileWrite($file, StringTrimRight($txt, 2)) ; cr + lf , on peut ausi le faire en regexp ;)
FileClose($file)
Re: [..] Fonction FileWriteFromArray
Posté : dim. 03 mars 2013 17:16
par clark17
Effectivement, ça fonctionne nickel. Merci pour le coup de main. C'est bizarre que dans la fonction il ne détecte pas la fin de l'array pour ne pas ajouter une ligne vide...
Voici le code en définitif:
Code : Tout sélectionner
#Include <Array.au3>
#include<File.au3>
;Ouverture du fichier et mise dans un tableau
$fichier_a_ouvrir = "1STD.SET"
$fichier = FileOpen($fichier_a_ouvrir, 16)
$tableau_fichier = StringRegExp(FileRead($fichier), '[[:xdigit:]]{2}', 3)
FileClose($fichier)
;Declaration des variables pour les noms des entreprises
$debut_nom = 17712
$longueur_fullname = 39
$longueur_shortname = 15
$nombre_entreprise = 35
$longueur_csv = $nombre_entreprise + 1
Dim $csv[$longueur_csv] = ["FULL NAME (max 39 characters);SHORT NAME (max 15 characters);COLOR ID (1 character, no ideas what is it!)"]
;Assignation de $i au début des noms d'entreprises
$i = $debut_nom
;Récupération du noms des entreprises
For $y = 1 to $nombre_entreprise
$ligne = ""
;Récupération du FULLNAME
For $i = $i to $i + $longueur_fullname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du SHORTNAME
For $i = $i to $i + $longueur_shortname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du Color_ID
$ligne &= Chr("0x" & $tableau_fichier[$i])
$i = $i + 11
$ligne = StringStripWS($ligne, 2)
;Assignation du mot dans un tableau pour export en csv
$csv[$y] = $ligne
Next
;Exportation du tableau dans un fichier csv
_FileWriteFromArray("corporation.csv", $csv)
;Supression de la dernière ligne vide du csv
$csv = FileRead("corporation.csv")
$fichier = FileOpen("corporation.csv", 2)
FileWrite($fichier, StringTrimRight($csv, 2))
FileClose($fichier)
Sujet résolut merci à vous.