Gambas France BETA


Pas de compte ? Incription

désordre dans parcour de fichiers

Ce sujet est résolu.

1
AuteurMessages
spheris#1 Posté le 3/4/2018 à 11:27:08
Bonjour,
J'ai un répertoire contenant 100 fichiers de type texte comme ceci :

a1.txt
a2.txt
a3.txt
...
a10.txt
a11.txt
...
a98.txt
a99.txt
a100.txt


je dois extraire la ligne de 3 de chaque fichier et la mettre dans un seul autre fichier final.csv

Voici mon bout de code :

1
2
3
4
5
6
7
FOR EACH myfile IN Dir(myrep)
monfichier = OPEN myrep & myfile FOR READ
LINE INPUT #monfichier, maligne 'lire ligne 1
LINE INPUT #monfichier, maligne 'lire ligne 2
LINE INPUT #monfichier, maligne 'lire ligne 3
fichierfinal = fichierfinal & ";" & maligne & Chr$(10)
NEXT



Ce qui est curieux c'est que la boucle FOR EACH lit les fichiers en vrac et mon fichier final est comme ceci :

a12.txt;toto
a1.txt;tata
a18.txt;bob
a28.txt;boub

....

pourquoi ne lit-il pas les fichiers l'un à la suite de l'autre 1,2,3...?
Y-a-t-il un moyen de les avoir dans l'ordre ?
Merci pour votre réponse
didier18#2 Posté le 3/4/2018 à 22:42:22
Bonjour spheris

Je vois au moins 2 solutions à ton problème...
1) soit tu fais le tri en entrée.
2) soit tu le fais avant l'enregistrement.

1) En entrée
Puisque "For each" lit les fichiers en vrac et comme tu sais qu'il y a 100 fichiers, pourquoi ne pas utiliser une boucle for i = 0 to 100 (ou for i = 100 to 0 step-1 pour l'ordre inverse) de cette façon la lecture du fichier pour récupération des lignes devrait se faire selon l'ordre de i...


2) Avant l'enregistrement
Quel est le critère de tri ? (a12.txt, a1.txt etc. ou toto, tata etc)
Le plus simple serait peut être de mettre ces données dans un tableau ou une listbox pour l'utilisation de la propriété "sorted"...
De faire le tri qui t'intéresse...
Puis d'enregistrer le contenu du tableau (ou de la listbox).

Il y a peut être plus simple...

Bonne journée.
linuxos#3 Posté le 4/4/2018 à 02:02:44
Un peu de sel, de poivre et la crevette sera... Bonjour spheris

Peut etre avec ce petit plus: .Sort(gb.Ascent)
1
2
3
4
5
6
7
FOR EACH myfile IN Dir(myrep).Sort(gb.Ascent)
monfichier = OPEN myrep & myfile FOR READ
LINE INPUT #monfichier, maligne 'lire ligne 1
LINE INPUT #monfichier, maligne 'lire ligne 2
LINE INPUT #monfichier, maligne 'lire ligne 3
fichierfinal = fichierfinal & ";" & maligne & Chr$(10)
NEXT


Olivier
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous.
didier18#4 Posté le 4/4/2018 à 09:52:14
Bonjour

Bien plus simple, effectivement, merci Olivier.
Sinon j'avais aussi pensé à ça "For Each myfile In Dir(myrep).Sort(gb.Natural)" si ça peut aider...

Bonne journée.
spheris#5 Posté le 8/4/2018 à 20:24:48
Extra ça marche !
Merci à vous deux pour le tuyau.
;)
1