#1 Le 26/05/2008, à 09:02
- tominardi
Free Pascal - Comparer deux chaînes de caractères
Salut,
Dans le cadre d'une appli réalisé sous Lazarus, j'ai besoin de parser un fichier XML, de récupérer les valeurs, les analyser et changer l'état d'un objet selon la valeur.
Pour parser le fichier XML, pas de soucis. J'ai testé j'arrive bien à récupérer ma valeur.
extrait simplifié du fichier xml :
<fichier xml>
<sujet>Vrai</sujet>
</fichier xml>
La valeur récupérer, "Vrai" est non typé. Pour être sur de la typer, je la stocke dans une variable "test" de type String.
Je souhaite changer l'état d'un bouton radio selon la valeur de "test". On passe par une variable "sujet" car dans les faits il y a 5 sujets différents. Pour le test j'ai une zone de saisie qui permet d'écrire la comparaison.
if (test = 'Vrai') then
begin
sujet:=true;
zonedesaisie.Text:='Comparaison : Vrai = '+test;
end
else
begin
sujet:=false;
zonedesaisie.Text:='Comparaison : Faux = '+test;
end;
bouton_radio.checked:=sujet;
Seulement, dans les faits, la comparaison de chaînes semble plus compliqué. En effet, avec ce code, la zone de saisie affiche : "Faux = Vrai". Donc il considère que ma chaîne 'Vrai' n'est pas égale à 'Vrai'.
Je suppose donc qu'il y a une manipulation à faire pour comparer des chaînes dans ce langage.
Ma question donc, comment comparer deux chaînes ?
Merci d'avance.
Hors ligne
#2 Le 26/05/2008, à 09:51
- tominardi
Re : Free Pascal - Comparer deux chaînes de caractères
J'ai utilisé la fonction CompareText (http://www.freepascal.org/docs-html/rtl/sysutils/comparetext.html)
Mais j'ai un soucis.
Quand je 'Vrai' à 'Vrai', il ne trouve pas que les deux valeurs sont identiques. Le 'Vrai' issue du XML est supérieur à celui en dur.
Cependant, comme la valeur 'Faux' issue du XML est inférieur, j'ai des résultats utiles (puisque sujet ne peut être que 'vrai' ou 'faux') et je peux donc produire un code qui retournera des résultats exacts.
Mais je ne considère pas ça comme résolu, puisqu'il s'agit d'une méthode de sioux.
Je me demande si cela ne vient pas du type des variables :
Ma valeur 'test' semble être de type AnsiString, alors que je le compare à 'vrai' qui est peut être un simple String. Cela doit être différent dans la méthode de comparaison.
Hors ligne