Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1452 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Operation sur des strings

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Operation sur des strings

n°350409
Shogun2002
Posté le 02-04-2003 à 17:34:59  profilanswer
 

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
mood
Publicité
Posté le 02-04-2003 à 17:34:59  profilanswer
 

n°350418
Shogun2002
Posté le 02-04-2003 à 17:40:54  profilanswer
 

Bon je viens de voir une methode de antp que je vais tester ....

n°350422
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-04-2003 à 17:44:21  profilanswer
 
n°350423
Shogun2002
Posté le 02-04-2003 à 17:46:58  profilanswer
 

Bravo antp ... :sol:  
 
avec cette technique :
 
liste := TStringList.Create;
liste.Text := StringReplace(lesSelects.Items[Exportation.itemindex],' ', #13#10, [rfReplaceAll]);
 
 
Allez hop je vais le garder au chaud ....

n°350428
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-04-2003 à 17:55:03  profilanswer
 

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 :)

n°350435
taureau
Posté le 02-04-2003 à 18:09:23  profilanswer
 

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.

n°350634
GuYzMo
Posté le 02-04-2003 à 22:56:10  profilanswer
 

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 :)


Message édité par GuYzMo le 02-04-2003 à 22:57:22
n°350676
antp
Super Administrateur
Champion des excuses bidons
Posté le 02-04-2003 à 23:23:21  profilanswer
 

les chaînes passées en param vaut mieux mettre "const" devant, question de perf (passage par adresse au lieu de passage par valeur)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°350925
Shogun2002
Posté le 03-04-2003 à 09:32:40  profilanswer
 

Rebonjour
 
Est que avec la methode de antp on peut utiliser 2 délimiteurs dans une meme chaine ?
 
ex :  ' ' et '='

n°350934
Shogun2002
Posté le 03-04-2003 à 09:36:31  profilanswer
 

Ex : Prendre toutes les chaines (et les stocker dans un TStringList) compris entre les caracteres '=' et ' ', et non l'inverse.

mood
Publicité
Posté le 03-04-2003 à 09:36:31  profilanswer
 

n°350946
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 09:42:09  profilanswer
 

oui, en faisant encore plus bourrin :
 
liste.Text := StringReplace(StringReplace(chaine, delim1, #13#10, [rfReplaceAll]), delim2, #13#10);
 
:D
 
edit: ha zut j'avais pas vu le 2e message
bhen là tu fais un truc genre :
 

Code :
  1. function GetNextStr(const d1, d2: string; var s: string): string;
  2. var
  3.   p1: Integer;
  4. begin
  5.   p1 := Pos(d1, s);
  6.   p2 := Pos(d2, s);
  7.   if (p1 = 0) or (p2 = 0) then
  8. begin
  9.     Result := '';
  10.     s := '';
  11.     Exit;
  12.   end;
  13.   // si p2 n'est pas trouvé, on ignore le reste. S'il faut garder
  14.   // le reste, enlever p2 du if ci-dessus et enlever le commentaire ci-dessous:
  15.   //if p2 = 0 then
  16.   //  p2 := Length(s);
  17.   Result := Copy(s, p1 + 1, p2 - p1 - 1);
  18.   Delete(s, 1, p2);
  19. end;


 

Code :
  1. while s <> '' do
  2.   liste.Add(GetNextStr('=', ' ', s));


 
un truc du genre, à vérifier


Message édité par antp le 03-04-2003 à 09:59:38
n°350952
Shogun2002
Posté le 03-04-2003 à 09:45:22  profilanswer
 

Ok je teste !

n°350961
Shogun2002
Posté le 03-04-2003 à 09:54:19  profilanswer
 

liste.Text := StringReplace(StringReplace(chaine, delim1, #13#10, [rfReplaceAll]), delim2, #13#10, [rfReplaceAll]);
 
Bon je teste la seconde methode  

n°350965
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 09:57:40  profilanswer
 

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)

n°350986
Shogun2002
Posté le 03-04-2003 à 10:05:16  profilanswer
 

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 !

n°351000
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 10:09:39  profilanswer
 

à mon avis la bonne est celle avec les deux if séparés ;)

n°351121
Shogun2002
Posté le 03-04-2003 à 10:36:16  profilanswer
 

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 ' '


Message édité par Shogun2002 le 03-04-2003 à 10:36:35
n°351130
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 10:37:58  profilanswer
 

comment ça des blancs entre chaque valeur ?
poste un exemple de chaîne à découper

n°351148
Shogun2002
Posté le 03-04-2003 à 10:44:58  profilanswer
 

(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


Message édité par Shogun2002 le 03-04-2003 à 10:45:20
n°351172
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 10:56:08  profilanswer
 

ha ouais mince, justement ici y a des espaces en plus de ceux qui délimitent :
 

Code :
  1. function GetNextStr(const d1, d2: string; var s: string): string;
  2. var
  3.   p1, p2: Integer;
  4. begin
  5.   p1 := Pos(d1, s);
  6.   if p1 = 0 then
  7.   begin
  8.     Result := '';
  9.     s := '';
  10.     Exit;
  11.   end;
  12.   Delete(s, 1, p1);
  13.   p2 := Pos(d2, s);
  14.   if p2 = 0 then
  15.     p2 := Length(s);
  16.   Result := Copy(s, 1, p2 - 1);
  17.   Delete(s, 1, p2);
  18. end;


Message édité par antp le 03-04-2003 à 10:56:20
n°351177
Shogun2002
Posté le 03-04-2003 à 10:59:24  profilanswer
 

Merci !

n°351338
Shogun2002
Posté le 03-04-2003 à 12:11:57  profilanswer
 

Tiens par hasard...
Oui encore moi   :sweat:  
 
Comment convertir un WideString en string ?

n°351348
Shogun2002
Posté le 03-04-2003 à 12:15:21  profilanswer
 

g essayé fromWide mais ça marche pas ...

n°351402
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 12:43:18  profilanswer
 

"Strings can be explicitly cast to a different string type (see Typecasts)."
 
bah essaie la solution bourrin s := string(ws); où ws = le WideString

n°351436
Shogun2002
Posté le 03-04-2003 à 13:25:13  profilanswer
 

Marche pas => "violation d'accés" ...
 
 
Merci quand même.
 

n°351547
bounty
Posté le 03-04-2003 à 14:32:24  profilanswer
 

De toute façon si ton widestring est trop grd tu peut avoir que des probs, à moins de le mettre ds différents string

n°351550
antp
Super Administrateur
Champion des excuses bidons
Posté le 03-04-2003 à 14:36:47  profilanswer
 

ouais enfin string (qui prend AnsiString à moins de modifier une option dans Delphi) c'est limité à 2 Go, donc avant de dépasser ça...

n°351559
bounty
Posté le 03-04-2003 à 14:46:42  profilanswer
 

autant pr moi ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Operation sur des strings

 

Sujets relatifs
[C]Operation de test de pixel sur images.Comment afficher le resultat d'une opération en flotant
[XML] Opération sur un fichier XML[vba] cherche une commande pour un eoperation sur les strings
[delphi] débutant : Opération sur chaines de caractères[C, C++] faire un array dynamique de strings...
OpenGL - vertex color operation ...[VBA] manipulation des strings
C# Help ! opération sur les strings 
Plus de sujets relatifs à : Operation sur des strings


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR