Ordre des string

zulot Messages postés 39 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 20 mai 2007 - 15 sept. 2004 à 23:36
zulot Messages postés 39 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 20 mai 2007 - 17 sept. 2004 à 09:38
Voila ma question est toute mais je la pose car mon code marche pas alors que theoriquement il devrait marché.

Dans quel ordre se classe les string quand on les compare

Parceque j'ai une chaine

bouquet;c
et une autre
bouquet;e
mais quoi que je fasse la bouquet;e vient se foutre avant la bouquet;c ce qui n'est absolument pas logique

4 réponses

Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
16 sept. 2004 à 00:12
Salut zulot,

j'ai essayé de comparer tes chaines et j'obtiens bien la bonne chose, je ne vois pas comment tu les compares ?

  if CompareStr('bouquet;c', 'bouquet;e') < 0 then
    ShowMessage('bouquet;c, bouquet;e')
  else
    ShowMessage('bouquet;e, bouquet;c');


Bonne Prog,

Olivier.
0
zulot Messages postés 39 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 20 mai 2007
16 sept. 2004 à 14:59
je les compare dna sune boucle en fait
Le code est un peu long je vais te le donner

//-----cherche la ou inserer la chaine dans le fichier et si elle est dedans--------

procedure TForm1.Dedans (var oui:boolean; var place:integer);
var fichier:Textfile;
nom_prenom1,nom_prenom2:string;
begin
Assignfile(fichier, 'Annuaire.txt');
FileMode:=2;
Reset(fichier);
try
nom_prenom1:=(LabeledEdit1.Text+';'+labeledEdit1.Text+';');
place:=-1;
repeat
readln(fichier,nom_prenom2);
place:=place+1;
until (nom_prenom1<nom_prenom2) or (SeekEof(fichier));
if nom_prenom1=nom_prenom2
then
begin
Label7conf.Caption:='La personne est déjà dans l''annuaire';
oui:=true;
end
else oui:=false;
Finally
CloseFile(fichier);
end;
end;

//-----partie d'inserttion de la ligne une fois la palce connue

Assignfile(fichier, 'annuaire.txt');
Assignfile(fichier_temp,'annuaire_temp.txt');
Filemode:=2;
rewrite(fichier);
reset(fichier_temp);
for i:=1 to place do
begin
readln(fichier_temp,ligne);
writeln(fichier,ligne);
end;
donnee:=(LabeledEdit1.Text+';'+LabeledEdit2.Text+';'+LabeledEdit3.Text+';'+
LabeledEdit4.Text+';'+LabeledEdit5.Text+';'+LabeledEdit6.Text+';'+
LabeledEdit7.Text+';'+LabeledEdit8.Text+';'+LabeledEdit9.Text+';'+
LabeledEdit10.Text+';'+LabeledEdit11.Text+';'+LabeledEdit12.Text+';'+
LabeledEdit13.Text+';'+LabeledEdit14.Text+';'+Edit1com.Text+';');
writeln(fichier,donnee);
Repeat
readln(fichier_temp,ligne);
writeln(fichier,ligne);
Until SEEKEOF(fichier_temp);
Label7conf.Caption:='la personne a bien été ajouté a votre annuaire';
CloseFile(fichier);
CloseFile(fichier_temp);
end;
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
16 sept. 2004 à 23:01
Salut,

lorsque je regarde ton code plusieurs chose me chagrine.
la technique que tu utilises, si je comprend bien ton code, n'est déjà pas très académique ;) mais ce n'est pas si grave que ça !

pour le code de recherche :
//-----cherche la ou inserer la chaine dans le fichier et si elle est dedans--------

procedure TForm1.Dedans (var oui:boolean; var place:integer);
var fichier:Textfile;
nom_prenom1,nom_prenom2:string;
begin
Assignfile(fichier, 'Annuaire.txt');
FileMode:= 2;
Reset(fichier);
try
//  Ce n'est pas le Nom et le Prénom que tu compares ?  
nom_prenom1: =(LabeledEdit1.Text+';'+labeledEdit1.Text+';');
place:= -1;
repeat
readln(fichier,nom_prenom2);
place:=place+1;
until (nom_prenom1<nom_prenom2) or (SeekEof(fichier));
if nom_prenom1=nom_prenom2
then
begin
Label7conf.Caption:='La personne est déjà dans l''annuaire';
oui:=true;
end
else oui:=false;
Finally
CloseFile(fichier);
end;
end;


la deuxième chose qui me chagrine, c'est que si j'ai bien compris tu enregistres ton contact ainsi que les infos qu'il lui sont propres sur une même ligne avec des séparateurs ";"

donnee:=(LabeledEdit1.Text+';'+LabeledEdit2.Text+';'+LabeledEdit3.Text+';'+
LabeledEdit4.Text+';'+LabeledEdit5.Text+';'+LabeledEdit6.Text+';'+
LabeledEdit7.Text+';'+LabeledEdit8.Text+';'+LabeledEdit9.Text+';'+
LabeledEdit10.Text+';'+LabeledEdit11.Text+';'+LabeledEdit12.Text+';'+
LabeledEdit13.Text+';'+LabeledEdit14.Text+';'+Edit1com.Text+';');
writeln(fichier,donnee);


Ce que je ne comprend pas c'est que tu relis ta ligne au niveau de ta première procedure et tu considères qu'il n'y a que le nom et le prénom.

nom_prenom1:=(LabeledEdit1.Text+';'+labeledEdit1.Text+';');
place:=-1;
repeat
 readln(fichier,nom_prenom2); 
place: =place+1;
until (nom_prenom1<nom_prenom2) or (SeekEof(fichier));


Je ne vois pas comment ta comparaison puisse fonctionner, sauf si je n'ai pas compris ton code :)

pour la comparaison de chaine de caractère je te conseil le function CompareStr Compare des chaînes en tenant compte de la distinction minuscules/majuscules.
ou CompareText Compare des chaînes par valeur ordinale sans tenir compte de la distinction minuscules/majuscules.

P.S. : afin que tu puisses reprendre ton code plus tard et que tu puisses le comprendre rapidement, ainsi que d'autre personnes, je te conseil de nommer des composants ainsi que te variable de manière à savoir à quoi elles servent.

Bonne Prog,

Olivier.
0
zulot Messages postés 39 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 20 mai 2007
17 sept. 2004 à 09:38
Effectivement dans ce code la j'ai trouvé l'ereur comme toi avec les label que je viens de corrigé, mais apres vaoir refait 10 fois le code j'avais pas fait attention.

J'ai refait en fait entierement le code et ne compare plus toute la chaine mais les caracteres, ce qui me permet d'avoir une egalité qui fonctionne et le code est beaucoup plus leger.

Par contre ta remarque sur les CompareText est tres interessante et vais voir ce qu'elle me donne.
L'avantage est que je comprend vite mais ne connais pas beaucoup de fonction existant en Delphi.

La par exemple pour trier les chaines j'utilisais un systeme avec un fichier temp assez lourd, et on ma orienté sur les TStringlist beaucoup plus puissant et rapide.

Enfin maintenant dans cette partie de code tout marche reste plus que l'optimisation :)

PS: mes composant son nommé je trouve correctement lol enfin moi je me comprend
0
Rejoignez-nous