PDA

Visualizza la versione completa : [DELPHI] Estrazione di informazioni da file di testo con TStringList


Dalton
02-12-2006, 15:29
Salve a tutti. Come da oggetto ho delle difficoltà con tstringlist, ovvero nn riesco ad eseguire una data operazione e non ho trovato niente di chiaro sul web quindi eccomi qui. Dunque alla fine è una cosa, credo, piuttosto semplice, ma che nn ho mai fatto. Praticamente carico un file ,txt o ascii, su questa lista, ovvero gli assegno il suddetto file, dopo questo vorrei catturare su una singola riga caratteri per esempio



francesco 30/07/81 Milano
luca 30/07/81 Milano
etc..
30 caratteri consentiti per il nome separatore("")
10 caratteri consentiti per la data separatore("")
15 caratteri consentiti per il luogo

Come dovrei fare per catturare le singole voci cosi da poterle trasferire come record in campi di un database(nome, data,luogo)??
Spero di essere stato abbastanza chiaro, grazie a tutti ciauz!

alka
02-12-2006, 15:54
Se hai scritto del codice, postalo...

Dalton
02-12-2006, 20:54
no no alka, ancora non ho scritto niente. Diciamo che il mio metodo è un po strano ovvero prima faccio tutto a grandi linee concettualmente, e poi scrivo il codice.

alka
03-12-2006, 02:55
Originariamente inviato da Dalton
no no alka, ancora non ho scritto niente. Diciamo che il mio metodo è un po strano ovvero prima faccio tutto a grandi linee concettualmente, e poi scrivo il codice.
Sì, ma allora definisci cosa non riesci a fare... non sai come caricare il file? non sai come ottenere una stringa riga per riga? non sai come estrarre informazioni dalla singola stringa? hai letto la guida in linea in merito a TStringList?

Dalton
03-12-2006, 23:53
procedure TForm1.Button1Click(Sender: TObject);
var
lista:TStringList;
lista1:TStringList;
begin
lista:=tstringlist.Create;
lista1:=tstringlist.Create;
opendialog1.Filter:='File (*.*)|*.*';
opendialog1.Execute;
lista.LoadFromFile(opendialog1.FileName);
lista1.Delimiter :='!';
lista1.QuoteChar :=' ';
lista1.DelimitedText :=lista.Text;
listbox1.Items.AddStrings(lista1);
end;
Questo è il codice che ho scritto ecco il risultato:
da :I!061110!1!00.00!0!000000000!REPARTO 1

a:
I
061110
1
00.00
0
000000000
REPARTO
1
Il problema sta nel fatto che dopo lo spazio mi porta il testo alla riga successiva della lista come devo fare per far si che il testo separato da spazi compaia sulla stessa riga??grazie a tutti ciao!!

alka
04-12-2006, 00:12
Scusa, ma non ho capito nulla di ciò che deve fare la tua applicazione... :)

Provo a cercare di capire... si tratta di aprire un file di testo, ottenere tutti i campi separati di una singola riga separandoli in elementi differenti e riportarli all'interno di una ListBox, ma mantenendo tutti i dati della riga assieme?

Ma in tal caso, non fai prima a caricarli così come sono?

Non comprendo qual è il risultato finale da ottenere.

Ci sono comunque tantissimi errori nel tuo codice, a partire dai "memory leak" derivanti dal fatto che allochi memoria creando oggetti TStringList ma non ne garantisci la distruzione attraverso il metodo Free, magari con un costrutto try...finally.

E ancora, non c'è alcuna verifica sul valore di ritorno del metodo Execute per la finestra di dialogo... se l'utente annulla la selezione, di fatto non selezionando alcun file, il programma va in errore.

Ci sono insomma molte correzioni da fare, alcune riguardanti le basi della programmazione in Delphi che dovrebbero essere già assodate prima di cimentarsi con la costruzione di qualsivoglia applicazione, più o meno complessa.

Ciao! :ciauz:

Dalton
04-12-2006, 00:37
Ho scritto del codice solo perchè volevo che capiste quello che avevo in mente per questo è cosi scarno.Cmq mi spiego meglio, dunque io ho un file ascii che ha dei diversi campi separati da punto esclamativo (!) es:

I!061110!1!00.00!0!000000000!REPARTO 1
ora quando io eseguo il codice, postato precedentemente, nell'ultimo campo (REPARTO 1) invece di stampare
REPARTO 1
in una singola riga lo divide come se lo spazio fosse un separatore e stampa in 2 righe
REPARTO e poi
1
Spero di essere un pò piu compresibile. grazie tante alka ciao!

alka
04-12-2006, 00:52
Perché hai impostato uno spazio come QuoteChar? :master:

Dalton
04-12-2006, 14:42
no scusami anche in qotechar c'è il carattere !.

alka
04-12-2006, 15:15
Originariamente inviato da Dalton
no scusami anche in qotechar c'è il carattere !.
Hai letto qual è lo scopo di QuoteChar nella Guida in linea? :master:

Loading