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!
Modifié en dernier par clark17 le dim. 03 mars 2013 17:17, modifié 1 fois.
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.
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
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 :
$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)
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
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...
#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)