JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Tri d'un LIST Jeu 27 Mai 2010 - 16:50 | |
| Pour trier le contenu d'un LIST: on peut utiliser la commande SORT du Dos. - Code:
-
DIM ftemp$ LABEL Tri ftemp$ = "Z:\Tri.txt": ' fichier temporaire LIST 1 ... END
Tri: ' Tri du LIST 1 FILE_SAVE 1, ftemp$ EXECUTE_WAIT "Cmd.exe /c SORT " + ftemp$ + " /O " + ftemp$ FILE_LOAD 1, ftemp$ FILE_DELETE ftemp$ RETURN Paramètres principaux de la commande SORT (taper 'HELP SORT' en ligne de commande): SORT [R] [+n] Path_in /O Path_out R: (reverse) tri en ordre inverse (Z à A, 9 à 0) +n: tri à partir du nième caractère de chaque ligne Path_in: chemin du fichier à trier Path_out: chemin du fichier résultat (peut être égal à Path_in) | |
|
Invité Invité
| Sujet: Re: Tri d'un LIST Jeu 27 Mai 2010 - 18:28 | |
| est-ce que cela fait la même chose que sort_on N dans Panoramic? |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Tri d'un LIST Jeu 27 Mai 2010 - 18:46 | |
| cela peut être une solution pour mon probleme que je voulais poser. je l'expose
je vais créer un fichier type *csv et je voulais trier les lignes d'après un critère compris entre deux séparateur tel "|" ceci de facon à optenir un classement.
Si JL35 maitrise bien le DOS peut être peut il m'aider ?.... | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tri d'un LIST Jeu 27 Mai 2010 - 18:57 | |
| Je regarde vite fait, mais si ton séparateur n'est pas toujours au même endroit dans la liste, ça ne rentre pas dans la norme du SORT. Dans ce ca il faudra programmer un peu... | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Tri d'un LIST Jeu 27 Mai 2010 - 19:03 | |
| Merci à toi
je peux avoir des lignes de nombre du style
...1|23|3|10...
le tout est de pouvoir trier d'après un des critères ce que "Sort_on N" ne permet pas | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tri d'un LIST Jeu 27 Mai 2010 - 21:34 | |
| Oups ! je n'avais même pas vu qu'il existait déjà une instruction Sort pour ces objets, honte à moi. Donc mon post n'a aucun intérêt puisqu'on peut trier en Panoramic pur. Mon exemple était l'équivalent de SORT 1 en Panoramic. Sauf que ça apporte la possibilité de trier en ordre inverse, ou à partir d'un rang fixe donné dans les articles.
@ygeronimi Par contre, si ce rang est à des emplacements variables, je ne vois pas comment on peut faire, sauf écrire un programme de tri spécial, faisable, mais un peu plus compliqué ! Les fichiers .CSV ce sont des fichiers Excel non ? | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Tri d'un LIST Ven 28 Mai 2010 - 12:30 | |
| les *csv sont des fichiers de base de donnée texte avec un separateur tel la virgule ou point virgule. dans "Sort" la liste est trié dans son ensemble , la ligne est le critère de tri et j'espérai pouvoir trié une ligne de plusieurs critère. Tant pis | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tri d'un LIST Ven 28 Mai 2010 - 16:16 | |
| Je ne comprends pas très bien ( pas bien réveillé), tu veux dire que si tu as des enregistrements avec des articles de longueurs variables, du genre: - Code:
-
abc;defg;hi;jklm bcaf;ed;ijkl;mn tu veux pouvoir faire le tri soit d'après le 1er article de chaque enregistrement (abc et bcaf), doit d'après le 2ème (defg et ed), soit d'après le 3ème (hi et ijkl), etc. c'est bien ça ? Dans ce cas je ne vois pas de méthode standard de tri qui puisse faire ça, mais ça doit pouvoir se programmer. | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Tri d'un LIST Ven 28 Mai 2010 - 23:47 | |
| Spécialement pour toi ygeronimi, c'est un peu un exercice de style, un petit programme de tri d'un fichier de type csv, qui permet le tri en donnant le rang de l'article à trier dans l'enregistrement (si j'ai bien compris ce que tu cherches). L'idée est de créer un fichier provisoire dans lequel l'article à trier est mis à un emplacement fixe (on complète ce qui précède par un caractère de remplissage quelconque), de façon à pouvoir bénéficier du SORT à partir d'un caractère donné. - Code:
-
' Tri d'un fichier type CSV, par rubrique au choix DIM f$, fm$, fr$, a$, b$, sep$, na, i%, k%, lmg, rmp$ Label Ecrcsv
f$ = "C:\Temp\Test.CSV" fm$ = "Z:\Manoeuvre" fr$ = "Z:\Trifait.CSV"
sep$ = ";": ' séparateur d'articles dans les enregistrements lmg = 50: ' longueur de la partie gauche (non triée) rmp$ = " ": ' caractère de remplissage quelconque (ici espace)
GOSUB Ecrcsv: ' création du fichier de test
na = 3: ' tri à partir de l'article (colonne) na (depuis 1)
IF na = 1 ' Tri à partir de 1 (tri normal) EXECUTE_WAIT "Cmd.exe /c SORT " + f$ + " /O " + fr$ ELSE FILE_OPEN_READ 1, f$: FILE_OPEN_WRITE 2, fm$ WHILE FILE_EOF(1) <> 1 FILE_READLN 1, a$: b$ = "" FOR i% = 1 TO na-1 k% = INSTR(a$, sep$) IF k% > 0 b$ = b$ + LEFT$(a$, k%) a$ = MID$(a$, k%+1, LEN(a$) - k%) END_IF NEXT i% a$ = b$ + STRING$(lmg-LEN(b$), rmp$) + a$ FILE_WRITELN 2, a$ END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 ' Tri à partir de lmg+1 EXECUTE_WAIT "Cmd.exe /c SORT /+" + STR$(lmg+1) + " " + fm$ + " /O " + fm$ ' Reconstitution des articles (suppression des caractères ajoutés) FILE_OPEN_READ 1, fm$: FILE_OPEN_WRITE 2, fr$ WHILE FILE_EOF(1) <> 1 FILE_READLN 1, a$: b$ = LEFT$(a$, lmg): a$ = MID$(a$, lmg+1, LEN(a$) - lmg) FOR i% = LEN(b$) TO 1 STEP -1 IF MID$(b$, i%, 1) <> rmp$ THEN EXIT_FOR NEXT i% a$ = LEFT$(b$, i%) + a$ FILE_WRITELN 2, a$ END_WHILE FILE_CLOSE 1: FILE_CLOSE 2 FILE_DELETE fm$ END_IF PRINT "Terminé !" END
Ecrcsv: ' création d'un fichier de type CSV pour tests DATA "Au;clair de;la lune;mon ami" DATA "Pierrot;prete-moi;taplume;pour ecrire" DATA "un mot;ma;chandelle est;morte" DATA "jenai;plus de;feu ouvre-moi;ta porte" DATA "pourlamour;dedieu;ceciest un;testdetricsv" FILE_OPEN_WRITE 1, f$ FOR i% = 1 TO 5: READ a$: FILE_WRITELN 1, a$: NEXT i% FILE_CLOSE 1 RETURN Comme d'habitude, les chemins des fichiers (f$, fm$, fr$) sont à adapter. Et il faut dimensionner la variable lmg en fonction de la longueur des enregistrements (j'ai mis une valeur arbitraire). | |
|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re: Tri d'un LIST Sam 29 Mai 2010 - 0:15 | |
| Je te remercie beaucoup JL35
J'enregistre la page pour mettre en application hors ligne. | |
|