Newsgroup: it.comp.lang.delphi
Titolo: usare il comando Copy(x,y,z) variando l'intervallo di riferimento

Dovrei copiare le righe di un memo e metterle in alcuni campi; fino a 
qui nessun problema perchè faccio 
campo.text:=copy(memo,1,5), il problema è che le righe non hanno un 
senso logico di lunghezza, cioè è una stringa di numeri e i vari campi 
non hanno la stessa lunghezza e non sono separati dal solito punto e 
virgola ma da un simbolo strano (io vedo un quadrato e non riesco a 
capire che simbolo sia). C'è di buono che sono stringhe di soli numeri, 
quindi ho pensato di fare in modo che il comando copy mi prenda la 
parte di stringa numerica indicandogli che finisce dove trova un 
carattere diverso da un numerofino al simbolo incognito. 
Ad esempio il contenuto del memo potrebbe essere:
1526826¿12¿958465889695
12¿25986¿2516
2586¿926¿95635
La prima parte è il codice del prodotto, pii c'è la quantità e poi 
un'altro numero che non so cosa sia ma serve comunque.
come posso fare che non c'è una riga di uguale lunghezza??. Ogni 
stringa la devo copiare il tre campi differenti, e poi creare un record 
nuovo e copiare la stringa successiva.S la lunghezza fosse uguale non 
avbrei problemi perchè ho già fatto una cosa del genere, ma qui non so 
come fare.
GRazie.
Inviato da 
www.mynewsgate.net

 senso logico di lunghezza, cioè è una stringa di numeri e i vari campi
Accedi alle righe tramite la proprietà Lines...

 capire che simbolo sia).
Allora, prima di tutto devi capire che simbolo è quello, o almeno il suo
codice ASCII: per fare questo scrivi
for i := 1 to Length(stringa) do
    Tag := Ord(stringa[i]);
sulla seconda riga mettici un bel breakpoint, poi aggiungi uno watch per
Form1.Tag e uno per stringa[i] e poi esegui.
Quando stringa[i] contiene il "cazzillo" potrai vedere qual è il suo codice
ascii, cioè Form1.Tag.
A questo punto devi usare la funzione Pos in un ciclo:
 fSeparator := Chr(XX);
// dove XX è il valore ascii del cazzillo
 s := stringa; // s è una variabile di lavoro temporanea
 fResult := Pos(fSeparator, s);
 while fResult > 0 do
 begin
  Memo1.Lines.Add(Copy(s, 1, fResult - 1));
  Delete(s, 1, fResult + Length(fSeparator) - 1);
  fResult := Pos(fSeparator, s);
 end;
 if (s = '') then begin
  if (Memo1.Lines.Count > 0) then
   Memo1.Lines.Add(s);
 end
 else Memo1.Lines.Add(s);
--
Jax
====
"Invito tutti a non scaricare mai file che abbiano qualche istruzione "exe":
sono strumenti eccezionali di lavoro, che si muovono da soli nel nostro
computer"
Un ingegnere Telecom su La Stampa

> Dovrei copiare le righe di un memo e metterle in alcuni campi; fino a
Rileggendo il tuo messaggio, mi è sfuggita proprio la prima riga: cosa vuol
dire "copiare le righe di un memo e metterle in alcuni campi"???
--
Jax
====
Se la malinconia avesse un volto per riconoscerla basterebbe guardami
allo specchio.

 dire "copiare le righe di un memo e metterle in alcuni campi"???
Immagino che lui in ogni riga ha 3 numeri separati da un carattere e vuole
estrarre questi 3 numeri e assegnarli a 3 campi di un record.

Che ha un file di testo caricato in un memo e deve mettere i 3 campi in un
db
Un porting di dati
-- 
_________________________________________________
Edmondo Di Tucci 
www.powernetsi.it/edmondo
 icq: 228646758
La Fortuna è cieca ma la Sfiga ci vede benissimo!

 Un porting di dati
Giusto, e ri-rileggendo il messaggio è anche chiaro ^__^;
Forse dovrei lavorare di meno e dedicare più tempo al ng... ;)
Cmq il mio metodo resta valido, basta ciclare con un for tutte le righe del
memo.
--
Jax
====
Non so nulla. E anche male.

Grazie jak, provo al più presto.
Inviato da 
www.mynewsgate.net