Newsgroup: it.comp.lang.delphi
Titolo: Copiare SottoStringa

Ciao a tutti, ho un piccolo quesito da porvi. Come posso fare a copiare una
sotto stringa da questa stringona?
Es: Volevo riuscire a catturare solo, le parole dopo i 2° " : " (pippo lava
la macchina), che comincia dopo i " : ", ma ce ne sono 2. Come posso fare?
: ghuidhguidfguidf@gdfgdfg@dfguih# : pippo lava la macchina.
Qlc suggerimento?
Usando Pos, mi restituisce solo il primo 2 punti ( : )
Grazie e Ciao

copiare  la stringa a partire dal primo pos e cerchi nuovamente i 2 punti
non funge?
A

: ghuidhguidfguidf@gdfgdfg@dfguih# : pippo lava la macchina.
Prova a guardare sull'Help se LastDelimiter può esserti utile
-- 
Lis
ICQ@Home #7317603sette     ICQ@Work #16285702tre
Mercatino: 
http://lis77.bravepages.com
 (aggiornato *con foto*: 16/06/03)

Ehm io ho provato in tutti i modi, ma nn riesco a farlo funzionare.
Nell'help nn mi è chiaro il funzionamento di LastDelimiter.
In internet nn ho trovato niente

 In internet nn ho trovato niente
- Cerchi i primi ':' col -pos-
- copi la strnga da quel punto in poi con -copy-
- Cerchi nuovamente i ':'
- fatto!
maz

 Nell'help nn mi č chiaro il funzionamento di LastDelimiter.
Cosa significa "non riesco a farlo funzionare"? Cerca di essere piů
dettagliato quando c'č qualcosa che non va, č come andare dal dottore e dire
"sto male".
Comunque, se FileName contiene un nome di file con questa riga
iPos := LastDelimiter('.', FileName);
in iPos hai la posizione del punto piů a destra.


Ok, adesso faccio un paio di esperimenti poi vi dico

Ok più o meno l'ho risolto xò mettendo il caso che arrivi una stringa così
ciao-questa-è-una-prova, come faccio a separare le singole parole? Con un
Pos, sono riuscito a ricavare la prima e l'ultima, nn volevo usare un
metodo, secondo me un po' rozzo di prendere la prima, tagliarla, poi da
quella tagliata estrarre la seconda, diventata prima, anche perchè se la
frase è lunga, ci vogliono tante variabili.
Grazie e Ciao



Prova queste (le ho trovate ora con una semplicissima ricerca con google,
vedi di usarlo un pò anche tu, va)
Procedure SplitString( Const S: String; separator: Char; substrings: 
TStringList );
  Var
    i, n: Integer;
  Begin
    If Assigned( substrings ) and ( Length( S )>0 ) Then Begin
      i:= 1;
      Repeat 
        n := IScan( separator, S, i );
        If n = 0 Then 
          n:= Length( S )+1;
        substrings.Add( Copy( S,i,n-i ));
        i:= n+1;
      Until i>Length( S );
    End; { If }
  End; { SplitString }
Procedure SplitString2( S: String; const separator: String; 
                         substrings: TStringList );
  Var
    i: Integer;
  Begin 
    If Assigned( substrings ) and ( Length( S )>0 ) Then Begin
      Repeat 
        i:= Pos( separator, S );
        If i > 0 Then Begin 
          substrings.Add( Copy( S, 1, i-1 ));
          Delete( S, 1, i + Length( separator ) -1 );
        End { If }
        Else Begin 
          substrings.Add( S );
          Break; 
        End; { Else }
      Until Length( S ) = 0;
    End; 
  End; { SplitString2 }
ps. quando scrivi su un NG non stai scrivendo degli sms (anche se sono già
contento che non usi le 'k'....)


Sorry per la scrittura, vedi è che dopo tanto tempo passato a usare "nn"
diventa un'abitudine, vedroò di regolarmi. Intanto grazie per la soluzione.
Ciao

 Usando Pos, mi restituisce solo il primo 2 punti ( : )
function PosFrom(Substr: string; S: string; From: integer): integer;
begin
  Result := Pos(SubStr, Copy(S, From, MaxInt));
end;
Inoltre
function StrTok(var S: String; Separators: TSysCharSet): String;
var start, stop: integer;
begin
  start := 1;
  while (start <= Length(S)) and (S[start] in Separators) do
    inc(start);
  stop := start;
  while (stop <= Length(s)) and not(S[stop] in Separators) do
    inc(stop);
  Result := Copy(S, start, stop-start);
  Delete(S, 1, stop);
end;
che si usa +/- come la strtok del C.
Saluti
Paolo Arosio