[R] Trier un fichier txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
marsujp
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 19 déc. 2008 15:35
Status : Hors ligne

[R] Trier un fichier txt

#1

Message par marsujp »

Bonjour,

J'ai un fichier .txt avec un horaire de la forme suivante :

Code : Tout sélectionner

a,bbb,15:10,cccccc
d,eeeeeeeeeeee,12:00,ffff
x,yyyyyy,19:20,zzzzzzzzzzzzzz
Ce que j'aimerais, c'est trier ce fichier .txt par horaire !
Je peux récupérer l'horaire de la ligne en cours, mais comment le trier par ligne ?
Faut il passer par un autre fichier ?

Merci.
:)
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [...]Trier un fichier txt

#2

Message par FernandG »

Bonsoir,

Ci dessous un exemple de code pour répondre à votre demande. Je suis parti de votre exemple que j'ai alimenté de deux lignes supplémentaires pour le test de tri.
► Afficher le texte
Je me sers surtout de la commande StringRegExp et du regex ([01]\d|2[0123]):([0-5]\d) qui vérifie le format de l'heure et des minutes. Donc 12:61 et 24:01 ne fonctionne pas.
► Afficher le texte
Qu'en est-il si l'horraire n'est pas correct et/ou une ligne ne comportant pas d'horraire ???
Dans le code, ce cas sera néanmoins pris en compte et mis en début de fichier. Il est facile de modifier cet état pour le mettre en fin de fichier par exemple. Et si tu ne veux pas de ces lignes, il suffit de supprimer du code les lignes:

Code : Tout sélectionner

    Else
        $array[$i][0] =  ""
        $array[$i][1] = $ligne
Voilà.

Tiens nous au courant.

Bonne soirée.
AutoITement.
Modifié en dernier par FernandG le ven. 06 mars 2009 21:59, modifié 1 fois.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [...]Trier un fichier txt

#3

Message par FernandG »

Bonsoir,

Je m'auto corrige en tenant compte de la remarque de Tlem sur la fonction ReDim dans ce post. Le principe du code est quasi le même. Voici par conséquent un nouveau code répondant au post d'origine.
► Afficher le texte
Bonne soirée, bonne nuit.
AutoITement.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [...]Trier un fichier txt

#4

Message par FernandG »

Bonsoir (encore),

@Tlem Je viens de faire des tests avec les deux codes et c'est vraiment impressionnant.

J'ai généré un fichier txt exemple de 3Mo comportant 99235 lignes :
Temps d'exécution du code sans ReDim : Moyenne de 36s (lancé 5x)
Temps d'exécution du code avec ReDim : Stoppé au bout de 65 min, non terminé.

Nouveau fichier txt exemple de 145ko comportant 5000 lignes :
Temps d'exécution du code sans ReDim : Moyenne de 2,7s (lancé 5x)
Temps d'exécution du code avec ReDim : Moyenne de 57s (lancé 5x)

Les résultats se passent de commentaires.

Bonne soirée, bonne nuit.
AutoITement.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11816
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [...]Trier un fichier txt

#5

Message par Tlem »

J'en avais déjà fait la douloureuse expérience, c'est pour cette raison que j'ai suggéré de ne pas utiliser la fonction ReDim pour des tableaux qui risque de prendre du volume.
Pour des dimensions inférieures à 50 c'est acceptable, au delà, ça ce traîne. :mrgreen:
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é".
marsujp
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 19 déc. 2008 15:35
Status : Hors ligne

Re: [...]Trier un fichier txt

#6

Message par marsujp »

Merci beaucoup !

Dsl de ne pas avoir repondu avant, mais je suis blacklisté chez moi... :shock:

Bref, merci encore pour le code, toutefois j'ai une erreur lorsque je l'execute, à la ligne suivante :

Code : Tout sélectionner

For $i = 0 To UBound($aSort, 1) - 2
    $NewLigne = StringSplit($aSort[$i],"#")
    [b]FileWrite($fichier_trier, $NewLigne[2] & @CRLF)[/b]
Next
Visiblement, le NewLigne[2] pose probleme...
Sinon, le fichier est bien trié, sauf la ligne qui devrait se trouver en derniere position, elle est vide...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Trier un fichier txt

#7

Message par ani »

bonjour, je viend de tester l'exemple script & fichier.txt proposé par fernandG, tout fonctionne correctement, aucune erreur.

Surement votre fichier texte qui ne correspondrait pas avec la vérification du script ?
vous auriez un exemple ?

votre erreur est de ce style?

Code : Tout sélectionner

FileWrite($fichier_trier, $NewLigne[2] & @CRLF)
FileWrite($fichier_trier, ^ ERROR
Répondre