Newsgroup: it.comp.lang.delphi
Titolo: Esiste questa funzione già fatta?

Sono ancora io,l'incubo del ng :)
Quello che devo fare è ottenere i vari "campi" di una stringa....mi spiego 
meglio:
stringa = 'ugo,franco,gianni,1234567890,toro'
    devo ottenere singolarmente 
"ugo","franco","gianni","1234567890","toro"
Le parole sono sempre dello stesso numero (nell'esempio 5),sempre separate 
da ",", di lunghezza variabile; se una parola manca ci saranno 2 virgole 
consecutive proprio per l'assenza di essa (esempio :   stringa = 
'ugo,franco,,123456,toro').
Esiste una funzione che fà questa cosa?

Michelinok ha scritto:

Esistono decine di modi per farlo.
Se cerchi "delphi parsing CSV" su Google groups, vedrai che e' un 
argomento gia' discusso molte volte e troverai anche modi e funzioni per 
farlo.
N.B. attenzione se i "campi" possono contenere il carattere di 
delimitazione (,)!
-- 
Roal Zanazzi

 Roal Zanazzi
1) Che significa CSV?
2) I campi fortunatamente non possono contenere il carattere di 
delimitazione :)
Grazie! 

 1) Che significa CSV?
Comma Separated Values. E' un formato usato per esportare e importare 
dati in fogli elettronici e database, usando un file di puro testo.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

stringa = 'ugo,franco,gianni,1234567890,toro'
var
  WordList: TStringList;
  I: Integer;
  S: String;
begin
  S := 'ugo,franco,gianni,1234567890,toro';
  WordList := TStringList.Create;
  WordList.Delimiter := ',';
  WordList.DelimitedText := S;
  for I := 0 to WordList.COunt-1 do
    ShowMessage(WordList.Strings[I]);
end;

"Michelinok" ha scritto nel messaggio

Esempio:
var
 a : tstringlist;
begin
 a := TStringList.Create;
 with a do
 begin
  Delimiter := ',' ;
  DelimitedText := 'aaaaaaaaa,bbbbb,,cccccc';
 end;
ecc...
Ora in a.Strings[Indice] hai ognuna delle sottostringhe.
Molto semplice e OO.

 ha scritto nel messaggio 
news:4503d235$0$35084$4faf...@reader4.news.tin.it...

st: String; Termini: TStringList;
Termini.Clear;
st:=Stringa;
While Pos(',',st)>0 then
    begin
    n:=Pos(',',st);
    Termini.Add( Copy(st,1,n-1) );
    Delete(st,1,n);
    st:=Trim(st);
    end;
e' da provare, Giorgio 

Mitico!
Questa funzioncina me la scrivo da una parte... (non credevo fosse cosě 
semplice...vedi? le cose piů semplici a volte sembrano incasinate!)
Grazie tante a te e agli altri! 

"Andrea Laforgia" <a.laf...@andrealaforgia.it.invalid> ha scritto nel 
messaggio news:hmm7g21jea6hpk82q...@4ax.com...

Perchè spezza anche sugli spazi???? 

Sistemata viene cosě:
      Termini:=TStringList.Create;
      Termini.Clear;
      st:=importata;
      While Pos(',',st)>0 do
        begin
         n:=Pos(',',st);
         Termini.Add( Copy(st,1,n-1) );
         Delete(st,1,n);
      end;
      Termini.Add(st);
Grazie tantissime,funziona che č una meraviglia!

Perchè spezza anche sugli spazi???? 
Perché sì :-)
procedure MySetDelimitedText(L: TStringList; const Value: string);
var
  P, P1: PChar;
  S: string;
begin
  L.BeginUpdate;
  try
    L.Clear;
    P := PChar(Value);
    while P^ in [#1..Pred(' ')] do
      P := CharNext(P);
    while P^ <> #0 do
    begin
      if P^ = L.QuoteChar then
        S := AnsiExtractQuotedStr(P, L.QuoteChar)
      else
      begin
        P1 := P;
        while (P^ >= ' ') and (P^ <> L.Delimiter) do
          P := CharNext(P);
        SetString(S, P1, P - P1);
      end;
      L.Add(S);
      while P^ in [#1..Pred(' ')] do
        P := CharNext(P);
      if P^ = L.Delimiter then
      begin
        P1 := P;
        if CharNext(P1)^ = #0 then
          L.Add('');
        repeat
          P := CharNext(P);
        until not (P^ in [#1..Pred(' ')]);
      end;
    end;
  finally
    L.EndUpdate;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  WordList: TStringList;
  I: Integer;
  S: String;
begin
  S := 'ugo,    franco,g  ianni,123456     789 0,toro     ';
  WordList := TStringList.Create;
  WordList.Delimiter := ',';
  MySetDelimitedText(WordList, S);
  for I := 0 to WordList.COunt-1 do
    ShowMessage('"'+WordList.Strings[I]+'"');
end;

Grazie tantissime,funziona che è una meraviglia!
Usa la funzione MySetDelimitedText se ci tieni alle performance ;-)

Thanks 

"Andrea Laforgia" <a.laf...@andrealaforgia.it.invalid> ha scritto nel 
messaggio news:2sr7g2ppqpsa125jg...@4ax.com...

Thanks!


Vero, altrimenti perde l'lutimo Item, Giorgio