Le Sun, 18 May 2003 22:34:44 +0200, Corine HAMEAU a $(D??(Bƒ$(D????(Bcrit$(D??(B‚$(D??(B :

> Bonsoir,
> 
> Existe-t-il une fonction qui indique si une sous chaine est pr$(D??(Bsente dans
> une chaine de caract$(D??(Bres.
> Merci de fournir un exemple qui fonctionne
> 
> Merci beaucoup pour les r$(D??(Bponses
> Cordialement
> Corine

Voil$(D??(B un morceau de code qui te permettra de faire une recherche et une
comparaison de string, natural, Integer ...
soit par chaine = chaine; valeur1 > valeur2; valeur1 < valeur2; ou
rechercher une string dans ce cas c'est le "like" regarde ci-dessous.

Je t'es mis plusieurs procedure tr$(D??(Bs utile qui utiliser pour la procedure
"compare" qui te permet de rechercher ta string.

@+

Code voir ci-dessous !

----------------

--==== Function qui permet de convertir un natural en string
Function convert(Valeur : string)return Natural is
  Begin
    return (natural'value(Valeur));
  Exception
    When CONSTRAINT_ERROR =>
      return 0;
end convert;

--==============================================================================

--=== Function qui donne la longueur d'une chaine
Function Len(Valeur : string) return Natural is
  Longueur : Natural := 0;
  Begin
    For i in Valeur'range loop
      Longueur := Longueur + 1;
    End loop;
    return Longueur;
End Len;

--==============================================================================

--=== Function qui permet de corriger une string
Function CorrChaine(Valeur : string; LongTotal : Natural) return String is

  LongChaine : Natural := 0;
  Begin
  LongChaine := Len(Valeur);
  return Valeur & (LongChaine+1..LongTotal => ' ');
  
End CorrChaine;

--==============================================================================

--=== Permet de renvoyer une string en partant de gauche d'une certaine longueur
Function Gauche(Valeur : string; Long : Natural) return String is
  
  Chaine : String(1..Long);
  Begin
    For I in 1..Long loop
      Chaine(I) := Valeur(I);
    End loop;
    return Chaine;
End Gauche;

--==============================================================================

--=== Permet de renvoyer une string en partant de droite d'une certaine longueur
Function Droite(Valeur : string; Long : Natural) return String is
  
  Chaine : String(1..Long);
  Begin
    For I in 1..Long loop
      Chaine(I) := Valeur((Len(Valeur)-Long)+I);
    End loop;
    return Chaine;
End Droite;

--==============================================================================

--=== Permet de mettre une string en Majuscule
Function MajusculeTexte(Valeur: String) return String is
code : integer := 0;
Chaine : String(1..Len(Valeur));
begin
  For I in Valeur'range loop
    code := character'pos(Valeur(I));
    if (code>96) and (code<123) then 
      code:=code-32;
      Chaine(I) := character'val(code);
    else  
      Chaine(I) := Valeur(I);
    end if; 
  End loop;
  return Chaine;  
   
end MajusculeTexte;

--==============================================================================

--=== Permet de mettre un caract$(D??(Bre en Majuscule
function Majuscule(c : character) return character is
code : integer := character'pos( c );
begin
 if (code>96) and (code<123)
   then 
     code:=code-32;
     return character'val(code);
   else  
     return c;
 end if;    
end Majuscule;

--==============================================================================

--=== Permet de comparer si deux string ce resemble (comme le like de SQL)
--=== Premi$(D??(Bre valeur string la deuxi$(D??(Bme et la string $(D??(B rechercher dans la premi$(D??(Bre.
Function Compare(ValeurRechercher : String; ValeurARechercher : String; Signe : String) return Boolean is
  
  ChoixSigne : Integer :=0;
  
  Begin
    If Len(ValeurARechercher) > Len(ValeurRechercher) then
      return False;
    Else
    
    If Signe = "like" or Signe = "Like" or Signe = "LIKE" then
      ChoixSigne := 1;
    Elsif  Signe = ">" then
      ChoixSigne := 2;
    Elsif  Signe = "<" then
      ChoixSigne := 3;
    Elsif  Signe = "=" then
      ChoixSigne := 4;
    Elsif  Signe = "/=" then
      ChoixSigne := 5;
    End if;
    
      Case ChoixSigne is
        When 1 =>
          For I in ValeurARechercher'range loop
            If Majuscule(ValeurRechercher(I)) /= Majuscule(ValeurARechercher(I)) then
              return False;
            End if;
          End loop;
          return True;
        When 2 =>
          If Convert(ValeurRechercher) > Convert(ValeurARechercher) then
            return True;
          Else
            return False;
          End if;
        When 3 =>
          If Convert(ValeurRechercher) < Convert(ValeurARechercher) then
            return True;
          Else
            return False;
          End if;
        When 4 =>
          If ValeurRechercher = ValeurARechercher then
            return True;
          Else
            return False;
          End if;
        When 5 =>
          If ValeurRechercher /= ValeurARechercher then
            return True;
          Else
            return False;
          End if;
        When Others =>
          text_io.put("Signe de comparaison incorrect");
          return False;
      End Case;
    End if;
    
End Compare;

--==============================================================================