L'heure est grave [Comparaison de chaîne de caractères]

L'heure est grave [Comparaison de chaîne de caractères] - Ada - Programmation

Marsh Posté le 04-12-2009 à 10:51:09    

L'heure est grave  :D  
 
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 :
  1. type T_Word is
  2.      record
  3.         Item : T_Language := 0;
  4.         Word : Unbounded_String;
  5.      end record;


 

Code :
  1. function "<"(Left, Right : in T_word) return Boolean is
  2.      Left_String, Right_String : String(1..80) :=
  3.        (others => Character'Val(32));
  4.   begin
  5.      if Left.Item /= 0 and then Left.Item < Right.Item then
  6.         return True;
  7.      elsif Left.Item /= 0 and then Left.Item >= Right.Item then
  8.         return False;
  9.      end if;
  10.      Left_String(1..Length(Left.word)) := To_String(Left.word);
  11.      Right_String(1..Length(Right.word)) := To_String(Right.word);
  12.      for I in 1..Positive'Min(Length(Left.word), Length(Right.word)) loop
  13.         if Left_String(I) < Right_String(I) then
  14.            return True;
  15.         elsif Left_String(I) > Right_String(I) then
  16.            return false;
  17.         end if;
  18.      end loop;
  19.      if Length(Left.word) < Length(Right.word) then
  20.         return True;
  21.      end if;
  22.  
  23.      return False;
  24.   end "<";


 
 

Code :
  1. function ">"(Left, Right : in T_word) return Boolean is
  2.      Left_String, Right_String : String(1..80) :=
  3.        (others => Character'Val(32));
  4.   begin
  5.      if Left.Item /= 0 and then Left.Item > Right.Item then
  6.  
  7.         return True;
  8.      elsif left.Item /= 0 and then Left.Item <= Right.Item then
  9.         return False;
  10.      end if;
  11.      Left_String(1..Length(Left.word)) := To_String(Left.word);
  12.      Right_String(1..Length(Right.word)) := To_String(Right.word);
  13.      for I in 1..Positive'Min(Length(Left.word), Length(Right.word)) loop
  14.         if Left_String(I) > Right_String(I) then
  15.            return True;
  16.         elsif Left_String(I) < Right_String(I) then
  17.            return false;
  18.         end if;
  19.      end loop;
  20.      if Length(Left.word) > Length(Right.word) then
  21.         return True;
  22.      end if;
  23.      return False;
  24.   end ">";


 
S'il vous plaît ? Merci bien.

Reply

Marsh Posté le 04-12-2009 à 10:51:09   

Reply

Marsh Posté le 04-12-2009 à 14:56:26    

Hulp !
 
 :sweat:

Reply

Marsh Posté le 04-12-2009 à 18:31:24    

Personne n'a d'idée de la raison pour laquelle certain mots avec caractère(s) accentué(s) ne sont pas trouvés ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed