FONCTION D'EXTRACTION D'UNE CHAÎNE

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 31 oct. 2006 à 14:53
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 1 nov. 2006 à 19:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40156-fonction-d-extraction-d-une-chaine

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 nov. 2006 à 19:05
ça roule, tu pourrais donner le lien a l'auteur en MP ? cette source va disparaitre. dsl pour lui
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
1 nov. 2006 à 18:46
oui julio, ce genre de source serait mieux sur Codyx ... mais une meilleure fonction est deja presente dans les sources codyx, posted by me depuis un moment.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 nov. 2006 à 11:19
je suis ok pour les performances execrables ^^ la boucle en est la cause, me trompe je ?
au fait, ce genre de code est à poster sur www.codyx.org, tu peux utiliser ton login/pass actuel pour le poster.
pourquoi le poster sur codyx ? et bien codes-sources regorge et degorge de mini-sources/-10 lignes de codes etc
>> Codyx est la "caisse moins de 10 articles" de codes-sources =)
cette source sera supprimée demain (01-11-06)
merci d'avance
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
1 nov. 2006 à 02:10
Il existe une fonction identique dans les sources, qui fonctionne mieux, ( chainepos ).

ici ta fonction as des performances trop execrable, pour qu'elle puisse etre utilisée.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
31 oct. 2006 à 19:25
yeeeees ok ça roule =)
donc les 3 "bugs" sont :
- si ma chaine fait plus de 255 caracteres > erreur de compilation
- si ma chaine commence par le caractere de séparation > décalage
- si ma chaine fini par le caractere de séparation > ne renvoie rien
allez hop au boulot
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 oct. 2006 à 18:54
Voilà :

Function Extraire(carset: string; chaine: string; i: integer): string;
var
y:integer;
z:integer;
//chaineextraite:string;
begin
for y:=1 to i do

begin
z:=Pos(carset,chaine);
//chaineextraite:=Copy(chaine,1,z-1);
Result :=Copy(chaine,1,z-1);
Delete(chaine, 1,z);

end;
//Result:=chaineextraite;
end;

A + ;-)
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
31 oct. 2006 à 18:45
jappe : ha bon ? tu remplaces la ligne avant le delete ? a mon avis ya une couinnerie si tu fais ça =)
copie/colle moi la fonction complete avec ton remplacement
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 oct. 2006 à 18:37
Salut,

Tu peux faire l'économie de la variable "chaineextraite" et écrire directement :
Result := Copy(chaine,1,z-1);
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
31 oct. 2006 à 15:21
idem pour char et cardinal ^^ je l'avais remplacé quand j'ai testé, et donc si la chaine ne se termine pas par le CARSET, rien n'est retourné, et si la chaine commence par CARSET, il y aura un décalage.
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
31 oct. 2006 à 15:14
J'ai pas le temps de tester là, mais j'aurai plutôt declaré :
Function Extraire ( Carset : Char; chaine : String; I : Cardinal ) : String;

Et à vu d'oeil si ta chaine ne se termine pas par le caractère separateur, et que tu demande à recupérer le dernière élément, ta fonction ne doit rien retourner.

Fait un zip avec un exemple, çà sera plus simpa :-)

Bon code, ++
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
31 oct. 2006 à 14:53
Fonctionne bien avec "test123" mais pas avec une phrase de 256 caractères. A modifier =)
Rejoignez-nous