[R] Récupérer des valeur dans un TXT pour faire un tableau
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Récupérer des valeur dans un TXT pour faire un tableau
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 !
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 !
Modifié en dernier par guillaume le lun. 26 janv. 2009 16:49, modifié 2 fois.
-
- Niveau 4
- Messages : 93
- Enregistré le : sam. 03 mai 2008 01:27
- Status : Hors ligne
Re: récupérer des valeur dans un TXT pour faire un tableau
ç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"
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
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" )
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
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
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
-
- Niveau 4
- Messages : 93
- Enregistré le : sam. 03 mai 2008 01:27
- Status : Hors ligne
Re: récupérer des valeur dans un TXT pour faire un tableau
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
Si la reponse que tu attendait n'était pas celle la dit 'men plus car n'est pas compris
- jbnh
- Niveau 11
- Messages : 1932
- Enregistré le : ven. 02 mai 2008 14:54
- Localisation : Bruxelles
- Status : Hors ligne
Re: récupérer des valeur dans un TXT pour faire un tableau
Salut, dans ce cas ci, StringSplit sera beaucoup plus efficace.
Merci aussi de lire les règles de présentation d'un message, et d'éditer votre titre.
Merci aussi de lire les règles de présentation d'un message, et d'éditer votre titre.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !
Merci
Merci
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Pourquoi modifier le nom !!!
Vous pouvez laisser le nom du fichier tel quel et ça fonctionnera.
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", ""))
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
-
- Niveau 11
- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
Pour lister vos fichier (*.ini) sans pour cela connaître leur nom, utiliser la fonction _FileListToArray
Exemple
$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 ?
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")
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 ?
La réponse sera oui.Je ne sais pas s'il est possible de sortir en fichier excel (pour classer par nom ou date ou age etc...)
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
merci ! vos réponses m'ont aidé a avancer dans mon script !
pour l'instant j'ai ceci qui fonctionne :
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)
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
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
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.
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.
-
- Niveau 11
- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] récupérer des valeur dans un TXT pour faire un tableau
cté juste un exemple guillaume
evidement le arraydisplay on peut le remplacer
faut faire une boucle du type for ...next sur le fichier
Exemple:

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
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 :
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 :
Alors par contre le fichier C:\ResultatCVS.txt reste tout le temps vide

Edit1:
je ne comprends pas bien la dernière ligne :
Code : Tout sélectionner
FileWrite($OutputCVS,FileRead($CvsList & $FileList[$indice],FileGetSize($CvsList & $FileList[$indice])))
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