[R] Fonction FileWriteFromArray

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

[R] Fonction FileWriteFromArray

#1

Message 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
Ç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.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#2

Message par ani »

$nombre_entreprise = 35
$longueur_csv = $nombre_entreprise + 1 < ca donne 36 :o donc la evidement ligne vide ^^'
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#3

Message 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!)"]) :P

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.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#4

Message 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 ;)
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#5

Message 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!
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#6

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Fonction FileWriteFromArray

#7

Message 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.
Répondre