L'heure est grave
Bonjour, merci de votre attention... Mes salutations les meilleurs.
Voilà que je bute sur un nouveau problème... J'ai un lexique des mots de la langue française trié dans l'ordre croissant en fonction du code ascii étendu.
Le fichier me semble être connu puisqu'il s'agit de la version 355 de Lexique Voir http://www.lexique.org/
Pour comparer par moi même les mots selon leur ordre lexical j'ai écrit deux fonction "<" et ">".
Ces fonctions sont un poil particulière car elle doivent également permettre de comparer les mots en fonction de leur ordre d'indexation.
Je passe en suite ces deux fonction à un arbre binaire générique qui me sert de gestionnaire de données pour le lexique.
Seulement, pour quelque mots, ex : "à", "déséquilibrée" ; les mot ne sont pas trouvé à leur place au moment de la recherche.
Je viens donc chercher votre aide, en espérant trouver un solution.
Voici les deux fonctions et le type T_Word :
Code :
type T_Word is record Item : T_Language := 0; Word : Unbounded_String; end record;
|
Code :
function "<"(Left, Right : in T_word) return Boolean is Left_String, Right_String : String(1..80) := (others => Character'Val(32)); begin if Left.Item /= 0 and then Left.Item < Right.Item then return True; elsif Left.Item /= 0 and then Left.Item >= Right.Item then return False; end if; Left_String(1..Length(Left.word)) := To_String(Left.word); Right_String(1..Length(Right.word)) := To_String(Right.word); for I in 1..Positive'Min(Length(Left.word), Length(Right.word)) loop if Left_String(I) < Right_String(I) then return True; elsif Left_String(I) > Right_String(I) then return false; end if; end loop; if Length(Left.word) < Length(Right.word) then return True; end if; return False; end "<";
|
Code :
function ">"(Left, Right : in T_word) return Boolean is Left_String, Right_String : String(1..80) := (others => Character'Val(32)); begin if Left.Item /= 0 and then Left.Item > Right.Item then return True; elsif left.Item /= 0 and then Left.Item <= Right.Item then return False; end if; Left_String(1..Length(Left.word)) := To_String(Left.word); Right_String(1..Length(Right.word)) := To_String(Right.word); for I in 1..Positive'Min(Length(Left.word), Length(Right.word)) loop if Left_String(I) > Right_String(I) then return True; elsif Left_String(I) < Right_String(I) then return false; end if; end loop; if Length(Left.word) > Length(Right.word) then return True; end if; return False; end ">";
|
S'il vous plaît ? Merci bien.