Newsgroup: it.comp.lang.delphi
Titolo: divisore di parole

salve a tutto il NG,
volevo sapere, perfavore, come potevo leggere ogni parola di
una frase con delphi, ex:
"ciao sono simone" io vorrei leggere
"ciao"
"sono"
"simone"
e magari metterlo in un memo (TStrings)
come faccio ?
grazie in anticipo,
Simone


Se il testo che vuoi dividere sta in una edit e vuoi che la divisione della
stringa avvenga sul click di un bottone nella procedura click del bottone
mettici questo:
procedure TForm1.Button1Click(Sender: TObject);
Var
  I: Byte;
  S: String;
begin
  I:=0;
  Repeat
    S:='';
    Repeat
      Inc(I);
      S:=S+Edit1.Text[I];
    Until Not (Edit1.Text[I] In ['a'..'z','A'..'Z']);
    Memo1.Lines.Add(S);
  Until I=Length(Edit1.Text)+1;
end;
Prova e fammi sapere.
Ciao

 ha scritto nel messaggio
news:QygU9.26353$AA2.1...@news2.tin.it...

Io farei qualcosa di + semplice, prova vedere questa procedura...
procedure TForm1.Button1Click(Sender: TObject);
Var
 i: Integer;
 s: String;
begin
  s:=Memo1.Lines.Text;
  while Pos(' ', S) > 0 do begin
    Memo2.Lines.Add(Copy(s,1,Pos(' ',s)));
    Delete(s,1,Pos(' ',s));
  end;
end;
non l'ho testata ma teoricamente dovrebbe andare,
forse avrà bisogno di qualche ritocco, ciao...
MAX

scusa mi è sfuggito una cosa... in finale ovviamente potrebbe mancare
lo spazio per cui devi recuperare l'ultima parola con
""Memo2.Lines.Add(s);""
Nota che la seguente procedura ha un solo ciclo di ricerca per cui risulta
notevolmente velocizzata....
procedure TForm1.Button1Click(Sender: TObject);
Var
 i: Integer;
 s: String;
begin
  s:=Memo1.Lines.Text;
  while Pos(' ', S) > 0 do begin
    Memo2.Lines.Add(Copy(s,1,Pos(' ',s)));
    Delete(s,1,Pos(' ',s));
  end;
  Memo2.Lines.Add(s);
end;
l'ho collaudata proprio ora e Funziona ;-))
ciao MAX

 ha scritto nel messaggio
news:PshU9.111654$Ou4.3...@twister2.libero.it...

va che è una bellezza, thx :DD

non funziona bene:\ se vuoi quella di MAXmax va


Già, già... Ma se il separatore è un punto e manca lo spazio?
Mi sa proprio che non funziona...
Ciao!!!


Invece NO!
Quella di max non va per un semplice motivo: se uno come separatore mette un
punto e non uno spazio il tuo programma non conta come dovrebbe. A meno che
come separatore tu dai per valido solo lo spazio...
Attenzione: se una parola č per esempio "sei1scemo" il mio ne conta 2 perchč
considera l'"1" come separatore: se per te l'"1" non č un separatore allora
nella riga:
    Until Not (Edit1.Text[I] In ['a'..'z','A'..'Z']);
mettici
    Until Not (Edit1.Text[I] In ['a'..'z','A'..'Z','0'..'9']);
Cosi ti da i numeri come caratteri validi.
Ciao

Se preferisci usare la VCL:
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Delimiter := ' ';
    sl.DelimitedText := 'Ciao mi chiamo Andrea';
    Memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end;
end;
HTH,
--
Andrea /\/\agni
ICQ#: 174108000


Usa quella di Karletto che e' la piu' completa perche' prevede la
specifica dei separatori.
Anche io ne ho scritta una simile per un mio programma, e va che e' una lippa
(cosa e' una lippa Boh... ma un mio collega me lo dice sempre e io lo 
prendo per buono :-)) 
Cmq se usi i separatori la routine corretta per questa frase 
"Ciao,fatti furbo!Usalo."
dovrebbe estrapolarti 4 parole, considerando come separatori ",.! "
Ciao
Morde.
morde [at] programmer [.] net