Bonjour
Je cherche à supprimer le dernier caractère d'une chaine
exemple
test = 'toto,titi,tata,';
je cherche à récupérer
'toto,titi,tata'
merci
Version imprimable
Bonjour
Je cherche à supprimer le dernier caractère d'une chaine
exemple
test = 'toto,titi,tata,';
je cherche à récupérer
'toto,titi,tata'
merci
Code:Delete(Test, Length(Test), 1);
@ Andnotor, je n'ai pas compris ta façon de faire.
Si tu pouvais m'expliquer.
Merci,
@+,
Cincap
Le premier caractère à effacer est le dernier de la chaîne, Son index est donc égal à la longeur de la chaîne, soit Length(Test).
@ Andnotor, "test" doit être integer alors j'essaye de le faire avec un Tedit et cela ne fonctionne pas.
Je continue....
@+,
Cincap
Cela ne marche pas avec les propriétés d'un objet. Dans ce cas il faut faire une copie:
Code:Edit1.Text := Copy(Edit1.Text, 1, Length(Edit1.Text) -1);
avec Delete, ça marche tres bien.
On ne peut pas passé un edit en parametre mais bon.
Tu fais
Code:
1
2
3
4
5
6
7 var s : string; begin s :=edit1.text; delete(s,length(s),1); edit1.text:=s; end;
ça marche tres bien.
Et merci adnotor, je ne connaissais pas ;)
je faisais la methode du copy.
@ Peter27x, Andnotor et Aos maintenant c'est ok, merci les gars.
@+,
Cincap
Un truc m'échappe, Jcpan = Cincap ?
@ Peter27x, jcpan = tout le monde pour moi mais bien entendu c'est lui qui marquera le "Résolu".:lol:
@+,
Cincap
@ Peter27x, ton message trouve une réponse à deux directions, en effet :
1, Cincap se cache derrière Jcpan = faux
2, Cincap répond à la place de Jcpan = vrai car ce genre d'astuce l'intéresse ce qui permet l'évolution de l'humain.
Voila voilou.
@+,
Cincap
Moi j'ai compris maintenant, meme si ça reste tres suspect ;)
lol
@ Aos, suspect, pas du tout le même style :lol:
Et puis Cincap me convient tout comme Max, aucune raison de se cacher derrière un autre alias.
Les administrateurs peuvent confirmer si ils ont du temps à perdre.
Eh les gars ont s'écartent du post !
Aos inscription janvier 2006
Cincap inscription janvier 2006 8-)
@+,
Cincap
A part ça, ... Delete, Copy, il y a plein de façon de le faire
En voici plein d'exemple
De loin, la plus simple finalement, pour enlever un caractère suffit à la fin, suffit de la raccourcir plus lent que le Delete
Fondamental, rapide, économique en mémoireCode:
1
2
3
4 procedure ReduceStrBySetLength(var S: string; NewLength: Integer); begin SetLength(S, NewLength); end;
Le plus Lent, sans conteste, des cas rares ou l'optimisation delphi avec les chaines nous fait un truc de fou et cela devient aussi rapide que le Delete ...Code:
1
2
3
4 procedure ReduceStrByDelete(var S: string; NewLength: Integer); begin Delete(S, NewLength + 1, MaxInt); end;
Pour la curiosité ... plus rapide que le Delete, surtout pour les delphi 3 à 7 ... après il semble que cela ne soit plus pertinent, ...Code:
1
2
3
4 procedure ReduceStrByCopy(var S: string; NewLength: Integer); begin S := Copy(S, 1, NewLength); end;
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 procedure ReduceStr(var S: string; NewLength: Integer); type PStrRec = ^StrRec; StrRec = packed record refCnt: Longint; length: Longint; end; begin if NewLength < Length(S) then begin S[Succ(NewLength)] := #0; PStrRec(Integer(S) - SizeOf(StrRec)).length := NewLength; end; end;
Ah je suis decouvert alors,
cincap=aos ???? ;)
Je me suis inscrit vers 2004 mais il y avait eu un probleme avec mon compte
donc je me suis réinscrit avec un nouveau compte.
SHAILETROLL : Merci pour ces précisions.
Le seul hic dans ReduceStrBySetLength, c'est qu'il faut connaitre la longueur
de la chaine pour la passé en paramètre
edition :
@shaiLetroll, en faite, il suffit de passé length(chaine) -1 en parametre donc je retire ce que j'ai dit au dessus, mais je le laisse quand meme pour que tu
vois le message.
Effectivement, AOS, c'est la vision inverse, ... on indique le nombre de caractère restant (finalement comme avec le Copy) ... dans certains cas, le code est plus facile à lire en utilisant ReduceStr qu'en mettant un Delete où il faudra donner le nombre de caractère à supprimer ...
Bonjour à toutes et à tous,
@ ShaiLeTroll, excellente réponse oh grand maître. :yaisse2:
Merci aussi à tous pour des réponses rapides et solutions qui font toujours avancer les connaissances.
@+,
Cincap
Merci à tous :)
je met résolu