Newsgroup: it.comp.lang.delphi
Titolo: convertire stringa in array

Salve a tutto il NG,
il mio problema all'apparenza è banale ma nell'help di delphi 2005 non sono
riuscito a trovare nulla.
Io ho una stringa costituita da una serie di numeri separati da virgola e
dovrei convertirla in un array di integer.
Esiste una sorta di funzione split come in php?
grazie
Luca

 Esiste una sorta di funzione split come in php?
non credo ci sia qualcosa del genere nella VCL, ma è semplice costruirsi una 
funzione del genere
program Project1;
{$APPTYPE CONSOLE}
uses
  Types, Classes, SysUtils;
function Split(const sCommaText: string): TIntegerDynArray;
var
  sl: TStringList;
  i: Integer;
begin
  SetLength(Result, 0);   //non credo sia necessario, ma melius abundare quam 
deficiere
  sl := TStringList.Create;
  try
    sl.CommaText := sCommaText;
    SetLength(Result, sl.Count);
    for i := 0 to Pred(sl.Count) do
      Result[i] := StrToIntDef(sl[i], 0);
  finally
    sl.Free;
  end
end;
var
  Output: TIntegerDynArray;
  i: Integer;
begin
  Output := Split('1,2,3,999, abcd, -1, ---1, +0, +-1, +1234567');
  for i := 0 to Pred(Length(Output)) do
    Writeln(Output[i]);
  Write('Premi <INVIO> per terminare');
  Readln;
end.
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 deficiere
Non serve... e comunque è "deficere" ;-)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Non serve... e comunque è "deficere" ;-)
ottimo.
Ma sai perchè l'avevo messo? Se per un caso assurdo si verificasse 
un'eccezione tra queste righe - prima del SetLength(Result, sl.Count) intendo 
- non ci sarebbe la lontana possibilità di ritrovarsi con un Result "sporco"?
begin
  sl := TStringList.Create;
  try
    sl.CommaText := sCommaText;
    SetLength(Result, sl.Count);
Io dò sempre per scontato che Result tipo
  function FxA: Integer;
  function FxB: Boolean;
  function FxC: TDateTime;
  function FxD: TSearchRec;
vengano sempre correttamente inizializzati e di fatto credo che sia così, 
tanto che non mi preoccupo mai di azzerare manualmente il Result in simili 
tipi di funzioni.
Però una volta mi sono spaccato la testa dietro un bug causato da una roba 
che ridotta all'osso era così:
 
  function FxS(c: Char): string;
  begin
    Result := Result + c;
  end
in cui Result, all'entrata della funzione, a volte era una stringa sporca e a 
volte era #0.
Ritornando al caso inziale, ho fatto il parallelo dynamic array - string.


 - non ci sarebbe la lontana possibilità di ritrovarsi con un Result "sporco"?
Se si verifica un'eccezione all'interno della funzione, il valore di 
ritorno non viene comunque utilizzato, a meno che tu non gestisca 
l'eccezione stessa direttamente all'interno della funzione istituendo un 
particolare valore di ritorno come segnale del verificarsi dell'errore.
Ciao! :-)
-- 
MARCO «Alka» BREVEGLIERI
   (
http://www.marco.breveglieri.name
)
Leggi le FAQ di ICLD: 
http://icld.altervista.org

 - non ci sarebbe la lontana possibilità di ritrovarsi con un Result
"sporco"?
Se si verifica un'eccezione, il valore di ritorno è l'ultimo dei tuoi
problemi.
