Existe-t-il une fonction qui indique si une sous chaine est présente dans
une chaine de caractères.
Merci de fournir un exemple qui fonctionne
Merci beaucoup pour les réponses
Cordialement
Corine
Voilà 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és 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ère 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ère valeur string la deuxième et la string à rechercher dans la première.
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;
--==============================================================================