Re: Sous string
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;
--==============================================================================
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735