Operation sur des strings - Delphi/Pascal - Programmation
Marsh Posté le 02-04-2003 à 17:40:54
Bon je viens de voir une methode de antp que je vais tester ....
Marsh Posté le 02-04-2003 à 17:46:58
Bravo antp ...
avec cette technique :
liste := TStringList.Create;
liste.Text := StringReplace(lesSelects.Items[Exportation.itemindex],' ', #13#10, [rfReplaceAll]);
Allez hop je vais le garder au chaud ....
Marsh Posté le 02-04-2003 à 17:55:03
Y a moyen de faire un truc plus propre, mais à moins de devoir appeler ce code des centaines de fois je ne suis pas sûr que ça en valle la peine
Marsh Posté le 02-04-2003 à 18:09:23
regarde aussi du coté des unités spécialisés comme faststrings tu sentiras la différence si tu dois manipuler beaucoup de données.
Marsh Posté le 02-04-2003 à 22:56:10
function delimite({in}chaine:string):string;
var indice:integer;
begin
indice:=pos(' ',chaine);
delimite:= copy(chaine,1,indice);
end;
tu te fais ta fonction ds un coin et t'es tranquille
Marsh Posté le 02-04-2003 à 23:23:21
les chaînes passées en param vaut mieux mettre "const" devant, question de perf (passage par adresse au lieu de passage par valeur)
Marsh Posté le 03-04-2003 à 09:32:40
Rebonjour
Est que avec la methode de antp on peut utiliser 2 délimiteurs dans une meme chaine ?
ex : ' ' et '='
Marsh Posté le 03-04-2003 à 09:36:31
Ex : Prendre toutes les chaines (et les stocker dans un TStringList) compris entre les caracteres '=' et ' ', et non l'inverse.
Marsh Posté le 03-04-2003 à 09:42:09
oui, en faisant encore plus bourrin :
liste.Text := StringReplace(StringReplace(chaine, delim1, #13#10, [rfReplaceAll]), delim2, #13#10);
edit: ha zut j'avais pas vu le 2e message
bhen là tu fais un truc genre :
Code :
|
Code :
|
un truc du genre, à vérifier
Marsh Posté le 03-04-2003 à 09:54:19
liste.Text := StringReplace(StringReplace(chaine, delim1, #13#10, [rfReplaceAll]), delim2, #13#10, [rfReplaceAll]);
Bon je teste la seconde methode
Marsh Posté le 03-04-2003 à 09:57:40
j'ai modifié le truc pcq dans ce que j'avais mis s'il ne trouvait pas le second délimiteur il prenait tout jusqu'à la fin, alors que j'imagine qu'il faut uniquement ce qui est entre '=' et ' '
(cf commentaire)
Marsh Posté le 03-04-2003 à 10:05:16
Nickel les deux méthodes !
Mais lequel vais-je choisir
Allez la premiere ... elle me prend des chaines que j'aurais peut-etre besoin !
Merci !
Marsh Posté le 03-04-2003 à 10:36:16
Avec la 2eme methode c normal qu'il me met des blanc dans la TStringList entre chaque valeur ...
Pourtant je n'ai jamais de ' ' entre '=' et ' '
Marsh Posté le 03-04-2003 à 10:37:58
comment ça des blancs entre chaque valeur ?
poste un exemple de chaîne à découper
Marsh Posté le 03-04-2003 à 10:44:58
(cl.tu_code=91 OR cl.tu_code=76 OR cl.tu_code=88 OR cl.tu_code=51 OR cl.tu_code=12)
Logiquement je devrais avoir que les valeurs ....
Sauf pour le dernier ... mais ça je vais m'en occuper
Marsh Posté le 03-04-2003 à 10:56:08
ha ouais mince, justement ici y a des espaces en plus de ceux qui délimitent :
Code :
|
Marsh Posté le 03-04-2003 à 12:11:57
Tiens par hasard...
Oui encore moi
Comment convertir un WideString en string ?
Marsh Posté le 03-04-2003 à 12:43:18
"Strings can be explicitly cast to a different string type (see Typecasts)."
bah essaie la solution bourrin s := string(ws); où ws = le WideString
Marsh Posté le 03-04-2003 à 14:32:24
De toute façon si ton widestring est trop grd tu peut avoir que des probs, à moins de le mettre ds différents string
Marsh Posté le 03-04-2003 à 14:36:47
ouais enfin string (qui prend AnsiString à moins de modifier une option dans Delphi) c'est limité à 2 Go, donc avant de dépasser ça...
Marsh Posté le 02-04-2003 à 17:34:59
Existe-il une fonction de type strtok (en C) en Delphi (ou Pascal).
Cette fonction permet de prendre dans une chaine une partie de la chaine jusqu'à un caractere
exemple :
'toto tata !meme'
le caractere de "separation" est ' '
Et il devrait me sortir 'toto'
ça existe ? ou je dois me taper à prendre la position du premier espace, de stocker l'index, de prendre la chaine de 0... à X, etc, etc ...
Message édité par Shogun2002 le 02-04-2003 à 17:35:52