[R] Récupérer des valeur dans un TXT pour faire un tableau

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

[R] Récupérer des valeur dans un TXT pour faire un tableau

#1

Message 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 !
Modifié en dernier par guillaume le lun. 26 janv. 2009 16:49, modifié 2 fois.
genaille08
Niveau 4
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

#2

Message 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
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: récupérer des valeur dans un TXT pour faire un tableau

#3

Message 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
genaille08
Niveau 4
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

#4

Message 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
Avatar du membre
jbnh
Niveau 11
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

#5

Message par jbnh »

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.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
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

#6

Message 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", ""))
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é".
ani
Niveau 11
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

#7

Message 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.
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] récupérer des valeur dans un TXT pour faire un tableau

#8

Message 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)
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] récupérer des valeur dans un TXT pour faire un tableau

#9

Message 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.
ani
Niveau 11
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

#10

Message 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
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] récupérer des valeur dans un TXT pour faire un tableau

#11

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