Creation + trie d'un TFileStream

Résolu
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010 - 22 août 2005 à 14:36
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 22 août 2005 à 17:24
Bonjour,
Je voudrais creer un TFileStream pour y inséré des numero extrait d'un fichier txt.

Ex d'une ligne du fichier txt:
Bon de livraison 00069036 du 30/07/2005 Client XXX.....

Je voudrais extraire le numero 00069036. J'ai beaucoup de ligne a extraire et a inserer dans le TFileStream.
Une fois ceci fait, je voudrais trier mon TFileStream dans l'ordre croissant.

Je ne sais pas trop comment faire, merci de votre aide.

12 réponses

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
22 août 2005 à 15:23
TStringList vaut plus qu'un tableau étant donné toutes les fonctionnalités mise à ta disposition : nombre d'item, recherche de position, rapidité de manipulation... Y'a plein d'ASM et de pointeurs.

Pour un tableau dynamique :
var Tableau : array of quelquechose;
begin
SetLength(Tableau,Taille);
//Prêt
end;

Fonctionne D5+...

===========
Validez les réponses si ok...

ViewVite XP : HTML
3
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
22 août 2005 à 15:05
Utilise plutôt un TStringList pour dresser des listes de numéros, quitte après à l'enregistrer dans un fichier texte.

Après, tu fais :
MonStringList.Sort;

Utilise la fonction Copy(...) pour extraire des sous-chaînes.

===========
Validez les réponses si ok...

ViewVite XP : HTML
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 15:14
Sinon je pense avoir une petite idée sur la façon de faire. En faite j'ai pensée apres reflection, d'oublier le TFileStream, et de créer un tableau dinamique, et ensuite de faire un tri a bulle. Mais comment créer mon tableau dinamique?
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 15:20
Ouais, je vais faire un copy pour extraire les num. J'ai vu sa dans l'aide delphi (j'aurais du regarder avant). Mais pour le tableau dynamique, comment je peux faire d'apres toi?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 15:28
Merci.
Dans:
var Tableau : array of quelquechose;
Le quelquechose correspond a quoi?

Et fonctionne D5+... ça veut dire quoi?
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
22 août 2005 à 15:39
array of integer
array of string
array of TStringList
Bref... un tableau de types (structures ou objets)

Les array de taille indéfinie ne sont pas supportés par tous les linkers Delphi, notamment Delphi (D3) pour le 32 bits. Quand je met D5+, cela veut dire compatible pour Delphi version 5 et versions plus récentes. Mais il me semble même que D4 supporte ce genre de tableaux.

===========
ViewVite XP : HTML
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 15:52
Ah d'accord, c'est bon pour moi alors je bosse sous Delphi 7.
Merci pour ces renseignement
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 16:10
Pour inserer dans mon tableau ce que j'ai extrait avec la fonction copy(...)? quelle est la synthaxe?
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 16:16
Encore une question:
Je voudrais lui dire:
Si Debut_de_la_ligne commence par 'Bon' alors...
Comment lui demander si la ligne du fichier txt commence par 'Bon'?
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
22 août 2005 à 16:56
Pour inserer dans mon tableau ce que j'ai extrait avec la fonction copy(...)? quelle est la synthaxe?

Si tu as un array of string et que l'index numéro N est disponible, tu fais :
MonTableau[N]:= 'Ma chaine de caractères';
...sachant que string est illimité dans la longueur (l'allocation de mémoire automatique et dynamique).

Sache que quand tu fais SetLength(Tableau,N), le tableau va de la case 0 à N-1. C'est pas sûr, mais en tout cas, ne te fais pas avoir avec les index qui ne commencent jamais à 1 (c'est d'ailleurs très rare les tableaux & listes qui commencent à 1).

De même pour les listes, la dernière valeur est donnée par :
MaListe[MaListe.Count-1]; //si et seulement si MaListe.Count>0


<HR>

Comment lui demander si la ligne du fichier txt commence par 'Bon'?

const Marque = 'Bon';
begin
if LowerCase(Copy(MaChaine,1,Length(Marque)))= LowerCase(Marque) then
ShowMessage('MaChaine commence par "'+Marque+'", sans gérer la casse des caractères.');
end;

Si tu charges ton fichier texte à ligne dans un TStringList, alors le début du fichier sera donné par :
MaListe[0];

La longueur de cette chaîne dépend uniquement du fichier considéré.

Cependant, il ne faut pas charger des fichiers énormes dans les listes. Faut alors simuler les TStringList par des lectures linéaires des fichiers à l'aide des fonctions de base : AssignFile, Reset, ReadLn, Eof et CloseFile;

=============
ViewVite XP : HTML
0
Dezouille Messages postés 75 Date d'inscription mardi 28 juin 2005 Statut Membre Dernière intervention 21 avril 2010
22 août 2005 à 17:06
Pour insérer dans mon tableau, je ne peux pas faire directement?

MonTableau[N]:=copy(...);
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
22 août 2005 à 17:24
Ben non, car la case n'est pas allouée => exception EAccessViolation.

Tu dois d'abord redéfinir la nouvelle longueur (de taille N+1), et après tu peux faire ce que tu veux sur la case N.

Tu utiliserais les listes, qu'il suffirait juste de faire :
MaListe.Add(Copy(...));

===========
ViewVite XP : HTML
0
Rejoignez-nous