Page 1 sur 1
[R] Récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 15:46
par guillaume
Bonjour,
Je cherche à créer un script qui me permettrait de traiter des fichiers TXT pour mettre certaines valeurs sous forme de tableau :
Je m'explique :
j'ai un dossier avec plusieurs fichiers TXT de la forme : nomdemachine_date.txt
un fichier texte contient :
[minefi_data]
type=string
value=(toto,40,17600)
je souhaiterais creer un tableau qui me relève les valeurs (que j'ai mis en rouge) :
nom de machine | date | value1 (toto) | value2 (40) | value3 (17600)
Je ne sais pas s'il est possible de sortir en fichier excel (pour classer par nom ou date ou age etc...)
je pensais essayer sortir les valeur avec des "_StringBetween", mais ce n'est pas évident car toutes les valeurs changent (sur la ligne value)
je n'ai pas possibilité de modifier la forme du fichier txt (sauf autre traitement autoit)
Merci de votre aide !
Re: récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 17:04
par genaille08
ça ressemble très fortement a un fichier ini plutot qu'a un fichier texte.
Si c'est ca il suffit d'utiliser les fonctions associer au fichier ini c'est a dire "iniread"
Code : Tout sélectionner
iniread ( "nomdemachine.ini", "minefi_data", "value", "erreur" )
Mais il faudra d'abord transformer l'extenstion du fichier utilisé car si l'extension est ".txt" ça ne marchera pas, il faudra mettre ".ini".
je dit ca parce que un fichier utiliser ( pour recuperer des valeurs ) est plus facile a utiliser qu'un fichier texte.
ensuite si dans tes valeurs tu trouve toujours des virgules tu peut utiliser ca pour les manipuler.
Il y a un mine de fonction qui te peuve te servir a manipuler des variables.
P.S. : si je me suis trompé au sujet du fichier ini : "filereadline" c'est le meme principe
Re: récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 17:25
par guillaume
effectivement ça fonctionne quand je le met en ini.
le soucis c'est que le fichier ini est créé à partir d'une variable donc je ne connais pas son nom (generé avec la date et le computername) :/
je vais essayé de voir si je peux pas sauter l'étape générer le fichier avec la date pour tout mettre directement dans une variable
Re: récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 17:59
par genaille08
Mais tu peut definir l'endroit et le nom que tu veux donner a ton fichier .ini et en general il est au meme endroit que la ou est sctocker ton srcipt.
Si la reponse que tu attendait n'était pas celle la dit 'men plus car n'est pas compris
Re: récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 18:55
par jbnh
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : mer. 21 janv. 2009 23:46
par Tlem
Pourquoi modifier le nom !!!
Vous pouvez laisser le nom du fichier tel quel et ça fonctionnera.
Code : Tout sélectionner
MsgBox(0,"", IniRead("nomdemachine_date.txt", "minefi_data", "value", ""))
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : jeu. 22 janv. 2009 11:16
par ani
Pour lister vos fichier (*.ini) sans pour cela connaître leur nom, utiliser la fonction _FileListToArray
Exemple
Code : Tout sélectionner
#Include <File.au3>
#Include <Array.au3>
$IniList = "Votredossier"
$FileList=_FileListToArray(IniList, "*.ini", 1)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
_ArrayDisplay($FileList,"$FileList")
$FileList deviend donc un tableau vour pourrez ainsi faire le traitement voulu, gracee a une petite boucle (for .. next).
La lecture du fichier (*.ini) vous devez relevez l'élèment dont vous avez besoin (Iniread) qui est dans votre exemple
valuecelui-ci vous retournera
(toto,40,17600) cette valeur deviendra un tableau faudra splitter la réponse grace à la virgule. StringSplit($value,",")
Une question dans votre exemple la valeur toto,40,... y a t'il les parenthese ?
Je ne sais pas s'il est possible de sortir en fichier excel (pour classer par nom ou date ou age etc...)
La réponse sera oui.
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : jeu. 22 janv. 2009 15:58
par guillaume
merci ! vos réponses m'ont aidé a avancer dans mon script !
pour l'instant j'ai ceci qui fonctionne :
Code : Tout sélectionner
# Convertion du fichier en Ini
filemove("c:\minefi.txt", "c:\minefi.ini")
# récupération des valeurs du fichier ini
$var = IniRead("C:\minefi.ini", "minefi_data", "value", "erreur" )
#
$fichier = "c:\minefi.ini"
$serveur = "\\serveur\partage"
$serveur2 = "\\serveur\partage\csv"
$t = FileGetTime($fichier , 1)
#creation du fichier texte sur le serveur avec le nom et la date
If Not @error Then
$nompc = @ComputerName
$date = $t[2] & "-" & $t[1] & "-" & $t[0] & "_"&$t[3]&"h"& $t[4]&"min"
$date2 = $t[2] & "-" & $t[1] & "-" & $t[0] & ";"&$t[3]&"h"& $t[4]&"min"
$nomfichier = $serveur&"\"&$nompc&"_"&$date&".txt"
FileMove($fichier, $nomfichier)
# créaction d'un fichier csv
$donnees = $nompc&";"&$date2&";"&$var
FileWrite($serveur2&"\"&$nompc&".csv", $donnees & @CRLF)
EndIf
Exit
Au final j'ai sur mon serveur un dossier avec un fichier csv par machine :
pc1.csv
pc2.csv
pcs3.csv
...
mon csv "pc1.csv" contient :
pc1;22-01-2009;15h20min;(toto,40,17600)
Voilà, le problème maintenant c'est que j'aimerais avoir un seul fichier csv qui contient tout ça avec un retour à la ligne à chaque pc
genre :
pc1;22-01-2009;15h20min;(toto,40,17600)
pc2;22-01-2009;15h22min;(jean,70,19600)
...
Je pense que je dois faire un autre script que je mettrais sur le serveur car sinon je risque d'avoir des problèmes d'ouverture sur le même fichier
(le premier script se lance depuis le pc)
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : ven. 23 janv. 2009 10:12
par guillaume
pour ani, oui j'ai les parenthèses sur mon résultat, mais je pense que je peux les retirer avec un script de remplacement de caractères.
J'ai testé avec la fonction _FileListToArray
j'arrive à peu près à en sortir un tableau, mais je voudrais savoir s'il était possible de stocker le résultat _FileListToArray dans une variable pour ensuite le coller dans mon fichier TXT (ou CSV) ?
en fait je ne veux pas utiliser le _ArrayDisplay mais je ne sais pas si on peut.
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : lun. 26 janv. 2009 10:34
par ani
cté juste un exemple guillaume

evidement le arraydisplay on peut le remplacer
faut faire une boucle du type for ...next sur le fichier
Exemple:
Code : Tout sélectionner
#Include <File.au3>
Dim $CvsList, $OutputCVS, $FileList
$CvsList = "C:\"
$OutputCVS = "C:\ResultatCVS.txt"
;Ici on vérifie si le fichier resultatcvs existe, si oui on l'efface
If FileExists($OutputCVS) then FileDelete($OutputCVS)
; On liste tout les fichiers CVS du dossier
$FileList=_FileListToArray($CvsList, "*.cvs", 1)
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
;c'est la boucle sur les fichiers (tableau contenant les noms de fichier)
For $indice = 1 to $FileList[0]
FileWrite($OutputCVS,FileRead($CvsList & $FileList[$indice],FileGetSize($CvsList & $FileList[$indice])))
Next
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Posté : lun. 26 janv. 2009 12:14
par guillaume
merci beaucoup !
Alors par contre le fichier C:\ResultatCVS.txt reste tout le temps vide

Pourquoi ?
Edit1:
je ne comprends pas bien la dernière ligne :
Code : Tout sélectionner
FileWrite($OutputCVS,FileRead($CvsList & $FileList[$indice],FileGetSize($CvsList & $FileList[$indice])))
je ne vois pas à quoi sert le FileGetSize.
Edit2:
Bon, c'est ok, j'ai réussi à avoir ce que je voulais comme résultat,
je n'ai pas bien compris le FileRead,FileGetSize alors j'ai simplement fais ça à la fin du script :
Code : Tout sélectionner
For $indice = 1 to $FileList[0]
FileWrite($OutputCSV,$FileList[$indice] & @CRLF)
Next