[..] Traitement de fichier TXT

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Cosmixi
Niveau 1
Niveau 1
Messages : 2
Enregistré le : mer. 16 nov. 2011 14:10
Status : Hors ligne

[..] Traitement de fichier TXT

#1

Message par Cosmixi »

Hello,

je débute en AutoIT et je cherche à traiter des fichier TXT automatiquement via script. (Je n'arrive pas à trouver d'aide la dessus sur le net)

Exemple de fichier TXT

Code : Tout sélectionner

123   TOTO     JOUR1  OK
456   TOTO     JOUR2  OK
567   TOTO     JOUR3  OK
678   TOTO     JOUR4  OK
234   TOTO     JOUR5  OK
345   TOTO     JOUR6  OK 
456   TOTO     JOUR7  OK
Pour le coup le séparateur est l'espace mais ca pourrait aussi etre ; ou , ou TAB

J'aimerai pouvoir le transformer comme ceci par exemple

Code : Tout sélectionner

TOTO OK JOUR       1
TOTO OK JOUR       2
TOTO OK JOUR       3
TOTO OK JOUR       4
TOTO OK JOUR       5
TOTO OK JOUR       6
TOTO OK JOUR       7
Voila en gros je devrais les retravailler par colonnes, il y a t'il un moyen comme dans windev que l'on sélectionne à chaque ligne la position 1 à 5 pour la recopier dans un autre fichier ou dans un buffer ?


Je serais preneurs de snippets aussi si vous en avez :

Type : supprimer première ligne du fichier TXT
copier ligne 4 à 15 d'un fichier TXT

etc

***** Important *****
- Ajoutez la balise [..] dans le titre de votre premier message
- N'oubliez pas les balises de code dans vos messages.
- N'utilisez pas la coloration syntaxique dans ce forum

Plus de détails ici :
http://www.autoitscript.fr/forum/viewto ... f=35&t=595
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#2

Message par sylvanie »

Bonjour
En expression régulière on a ça :


Code : Tout sélectionner

$file=@ScriptDir&"\tableau.txt"
$contenu=FileRead($file)
$transfo=StringRegExpReplace($contenu,"\d+\s+([^\s]+)\s+([^\d]+)([\d]+)\s+([^\r\n]+)","${1} ${4} ${2}   ${3}")
ConsoleWrite($transfo)
 
tableau.txt étant un fichier texte contenant votre input

Code : Tout sélectionner

123   TOTO     JOUR1  OK
456   TOTO     JOUR2  OK
567   TOTO     JOUR3  OK
678   TOTO     JOUR4  OK
234   TOTO     JOUR5  OK
345   TOTO     JOUR6  OK 
456   TOTO     JOUR7  OK
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#3

Message par zeshrek »

Et en expression pas régulière on a ca :

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3>

Global $i
Global $j = 1
Dim $FileRead
Dim $FileProcess[1][1]
Dim $FileToWrite[1][1]

Global $Separateur = " "

_FileReadToArray("test.txt", $FileRead)


For $i = 1 To UBound($FileRead) - 1
    If $FileRead[$i] <> "" Then
        ReDim $FileProcess[$j][4]
        ReDim $FileToWrite[$j]

        $FileProcess[$j - 1][0] = StringReplace(StringMid($FileRead[$i], 7, 9), $Separateur, "")
        $FileProcess[$j - 1][1] = StringReplace(StringRight($FileRead[$i], StringLen($FileRead[$i]) - 22), $Separateur, "")
        $FileProcess[$j - 1][2] = StringMid($FileRead[$i], 16, 4)
        $FileProcess[$j - 1][3] = StringReplace(StringMid($FileRead[$i], 20, 3), $Separateur, "")
        $FileToWrite[$j - 1] = $FileProcess[$i - 1][0] & $Separateur & $FileProcess[$i - 1][1] & $Separateur & $FileProcess[$i - 1][2] & $Separateur & $FileProcess[$i - 1][3]
        $j = $j + 1
    EndIf
Next
; _FileWriteFromArray("test2.txt", $FileToWrite)
_ArrayDisplay($FileProcess)
C'est plus long (a peine hein... ;) ) par contre on a pas le bug de la ligne 6 :D
Si vis pacem para bellum
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#4

Message par sylvanie »

c'st quoi le bug de la ligne 6 ? (sur 4 c'est encore plus étrange :mrgreen: )
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#5

Message par zeshrek »

Ligne 6 du résultat.
:D
Si vis pacem para bellum
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#6

Message par sylvanie »

:shock: tu as quoi comme résultat ?

moi j'ai ceci en sortie :

TOTO OK JOUR 1
TOTO OK JOUR 2
TOTO OK JOUR 3
TOTO OK JOUR 4
TOTO OK JOUR 5
TOTO OK JOUR 6
TOTO OK JOUR 7
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#7

Message par zeshrek »

Moi j'ai ceci :

Code : Tout sélectionner

TOTO OK JOUR   1
TOTO OK JOUR   2
TOTO OK JOUR   3
TOTO OK JOUR   4
TOTO OK JOUR   5
[color=#FF0000]TOTO OK  JOUR   6[/color]
TOTO OK JOUR   7
Si tu regardes bien sur son fichier source il y a un espace apres le OK, et ton regexp ne le sort pas
Si vis pacem para bellum
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#8

Message par sylvanie »

Ok, je ne l'avais pas quand j'ai fait le copier coller.
Et donc 2eme mouture (TheShrek Edition collector, seulement 30 copier/coller de ce code seront disponibles, soyez des milliers à le faire :mrgreen: ) :

Code : Tout sélectionner

$file=@ScriptDir&"\tableau.txt"
$contenu=FileRead($file)
$transfo=StringRegExpReplace($contenu,"\d+\s+([^\s]+)\s+([^\d]+)([\d]+)\s+([^\r\n\s]+)","${1} ${4} ${2}   ${3}")
ConsoleWrite($transfo)
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#9

Message par mikell »

Perso je vote sans restriction pour le script de l'ogre, pour une raison très simple

Tout en étant pétri d'admiration devant ceux qui manient le StringRegExp avec une telle virtuosité je confesse que j'ai du mal avec ces foutues lignes de 30 ou 40 signes cabalistiques
Et quand je vois

Cosmixi
Inscription: Mer 16 Nov 2011 14:10
Messages: 3

Je me dis que pour dégoûter un débutant d'autoit, StringRegExp c'est pas mal :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#10

Message par Tlem »

+1 pour l'admiration de ceux qui maitrisent les expressions régulières.
Ceci dit ce n'est pas un cas général et la modification du pattern n'est franchement pas à la portée de tout un chacun.

Donc comme d’habitude, je reste sur le mode classique mais en plus simple que l'ogre. ;)

Code : Tout sélectionner

$hFile = FileOpen("Test.txt")
Global $StrData

While 1
    $Line = FileReadLine($hfile)
    If @error = -1 Then ExitLoop

    Local $aData = StringSplit(StringStripWS($Line, 7), "  ")
    $StrData &= $aData[2] & " " & $aData[4] & " JOUR " & @TAB & StringRight($aData[3], 1) & @CRLF
WEnd

FileClose($hfile)
FileWrite("Test2.txt", StringTrimRight($StrData, 2))
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é".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#11

Message par mikell »

Ben voilà, au moins là on comprend :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#12

Message par bloodwolff »

Les Regex sont une grosse bouché à avaler mais je suis content de l'avoir fait. La seule commande RegExp remplace la multitude de fonction string... et est une fois compris beaucoup plus rapide à coder et plus rapide d'exécution, même je dirais :shock: plus simple.

Oui, pour un débutant c'est difficile à comprendre mais cela reste faisable et cela en vaux le prix ! Personnellement j'aurais préféré commencer par là et ne m'avoir jamais emmêler les pieds dans les string...

Donc voici pour le hors sujet ! Et Tlem et mikel
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#13

Message par Tlem »

Image
Si on se met aux expressions régulières, qui donc expliquera les choses de manière simple ?

Il est vrai que la puissance de cet outil est fantastique, par contre la maitrise du pattern demande un travail énorme et du temps, alors que la gestion des strings se fait naturellement et de manière très compréhensible. Image
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é".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#14

Message par mikell »

Tlem a écrit : la maitrise du pattern demande un travail énorme et du temps, alors que la gestion des strings se fait naturellement et de manière très compréhensible. Image
+1
Et pas d'accord bloodwolff, quand on débute il vaut mieux commencer par le commencement ^^
C'est facile, avec du recul, de dire "on aurait dû..."
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#15

Message par bloodwolff »

demande un travail énorme et du temps,
Oui mais c'est un coup à donner pour en faire gagner par la suite, de toute façon si tu veux moindrement te perfectionner tu devras un jour ou l'autre passer par là
"on aurait dû..."

Il y a une différence en "on aurait dû" et j'aurais préféré, pour justement comme je l'explique plus haut donner ce coup au début , et pour la difficulté au débutant les regex ne sont pas plus complexe à comprendre car elle n'utilise pas énormément de notion de prog ...
Compte skype : bloodwolfff
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#16

Message par jchd »

bloodwolff a écrit :les regex ne sont pas plus complexe à comprendre car elle n'utilise pas énormément de notion de prog
Je n'en suis pas sûr du tout du tout, du moins en ce qui concerne la variété de regexp offerte en standard par AutoIt (PCRE).
PCRE offre à peu près toutes les notions de programmation qu'il est utile de faire aborder à un débutant.
On a des conditionnelles, des boucles bornées ou non, des procédures, des fonctions, de la récursivité et un tas d'options intéressantes. Que PCRE (ou telle autre variété de regexp) soit ou non Turing-complete est un sujet ouvert à débat et non-trivial (cf. par exemple http://www.perlmonks.org/?node_id=809842).

Quoi qu'il en soit on déjà peut faire un bon cours de programmation basé sur PCRE, si bien sûr on accepte la transposition de la programmation "traditionnelle" à un traitement de chaîne, ce qui n'est qu'un paramètre somme toute mineur quant il s'agit d'apprentissage.

Que l'ensemble soit certes d'un abord indigeste est une évidence. Maintenant, nul n'est forcé de gloupser l'ensemble de PCRE en 3 jours.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#17

Message par bloodwolff »

Ah bon donc je suppose que vous avez raison! Mais reste que c'est utile prendre un peu de votre temps pour le maîtriser
Compte skype : bloodwolfff
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#18

Message par jchd »

Tu prêches un convaincu de longue date !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#19

Message par bloodwolff »

Je parlais en général ! Si j'aurais parlé de toi directement j'aurais tutoyé :P
Compte skype : bloodwolfff
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Traitement de fichier TXT

#20

Message par sylvanie »

Wouuah ! tant de passion pour les regexp !
Je suis d'accord sur le fait que c'est violent pour les non initiés et qu'un script de parse plus classique est plus abordable.
J'aime bien en mettre pour justement attirer l'attention sur ce qu'on peut faire avec. Perso j'ai dû m'y mettre réellement il y a 5 ans, et aujourd'hui comme je travaille surtout sous Linux je suis bien content de les connaître (on peut faire sans, mais bon ...)

Je pense qu'au prochain post je mettrai en entête :
Scripter advisory : This script contains explicit regexp :mrgreen:
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre