[Delphi] Conversion string > tstrings?

Conversion string > tstrings? [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 25-05-2004 à 20:41:40    

Bonsoir,
 
J'essaie de faire une fonction qui convertit une string en TStrings, les éléments à insérer dans TStrings étant séparés par des ; dans string.
 
Voilà ce que j'ai fait:

Code :
  1. function strtotstr(str: string): TStrings;
  2. var
  3.    tstr: TStrings;
  4. begin
  5.    tstr := tstr.Create;
  6.  
  7.    while (gauche(';', str) <> '') do
  8.    begin
  9.       tstr.Add(gauche(';', str));
  10.       str := droite(';', str);
  11.    end;
  12.    result := tstr;
  13.    tstr.Free;
  14. end;


gauche et droite servent à extraire les sous-chaines délimitées par le ;
 
Quelqu'un peut me dire pourquoi ça ne marche pas? Je suis pas assez doué pour voir mon erreur là...
 
Merci :)


Message édité par Ipso le 25-05-2004 à 20:42:07
Reply

Marsh Posté le 25-05-2004 à 20:41:40   

Reply

Marsh Posté le 25-05-2004 à 23:47:02    

Ça irait plus vite de dire où il n'y a pas d'erreur :whistle:
 
Version propre "vite faite" (pour la découple on pourrait faire mieux, mais c'est pas simple, et avant que cette solution ne pose des problèmes on a le temps de voir venir) :
 

Code :
  1. function strtotstr(const str: string): TStringList;
  2. var
  3.   tstr: TStringList;
  4. begin
  5.   tstr := TStringList.Create; 
  6.   tstr.Text := StringReplace(str, ';', sLineBreak, [rfReplaceAll]); 
  7.   Result := tstr;
  8. end;


 
Tu ne peux pas libérer le TStrings sinon tu retournes un pointeur ne valant plus rien de concret.
C'est l'appelant qui doit le libérer.
Pour cette raison, en général l'appelant crée le TStrings et le passe en paramètre à une procédure (pas de valeur de retour donc).
Pour créer un objet, on appelle le Create de sa classe, pas de l'objet lui-même vu qu'il n'existe pas encore !
On ne crée jamais de TStrings. C'est juste une classe générique (par ex pour le type de paramètre passé à la procédure/fonction) de laquelle dérivent TStringList et autres similaires.
Ta version marcherait peut-être pour la découpe, mais j'ai pas le courage de réfléchir. À la limite après avoir corrigé le Create et le Free tu peux la tester.
Quand tu dis que ça ne marche pas, tu aurais pu dire que ça crashait avec une Access Violation (je suppose). "Ça marche pas" ce n'est pas une erreur acceptable :p


Message édité par antp le 25-05-2004 à 23:48:35

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 26-05-2004 à 20:28:05    

Oui, dsl, je sais que c'était un peu vague, mais Delphi me sortait directement la fenêtre de débogage, j'étais un peu perdu... Encore une fois, je m'en suis sorti avec tes indications, merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed