mia sapreste dire come si potrebbe fare per importare un file txt, delimitato da tabulazione (quindi una vera e prorpia matrice) IN UNA TStringGrid?
grazie
mia sapreste dire come si potrebbe fare per importare un file txt, delimitato da tabulazione (quindi una vera e prorpia matrice) IN UNA TStringGrid?
grazie
Per gestire una lista di stringhe, caricarla e salvare su file di testo, si può usare la classe TStringList.
La StringGrid, dal canto suo, permette di accedere contemporaneamente al testo contenuto in righe e colonne tramite le proprietà Rows e Col.
E' possibile ottenere il contenuto della prima riga, ad esempio, dalla proprietà Rows[1]; la proprietà restituisce una lista di stringhe (che in realtà è un'unica stringa separata da ritorni a capo).
Creando una nuova istanza di TStringList, è possibile memorizzare il testo ottenuto da Rows nella proprietà Text, modificare il carattere delimitatore (ad esempio, "|", il pipe) e salvare il testo su file separando ciascun valore con questo deliminatore, che può eventualmente essere sostituito con il TAB (carattere #9).
Questo codice di esempio mostra come creare un'istanza di TStringList, memorizzare al suo interno il contenuto della prima riga di una griglia, modifica il delimitatore, visualizza le stringhe esportate in un memo e le salva in un file di testo, poi distrugge la StringList.codice:procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; begin SL := TStringList.Create; try SL.Text := StringGrid1.Rows[1].Text; SL.Delimiter := '|'; Memo1.Lines.Text := SL.DelimitedText; Memo1.Lines.SaveToFile('export.txt'); finally SL.Free; end; end;
Come al solito, la tua domanda è esageratamente vasta e richiederebbe un giorno di lavoro solo per fornire un esempio completamente funzionante...consulta la Guida in linea per conoscere tutte le funzionalità di TStringList e TStringGrid.Rows/Cols e poi valuta come combinarle per ottenere il formato di esportazione che desideri.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
grazie ma la mia domanda è opposta.
non devo caricare DA griglia, ma devo caricare IN una griglia
Si trattava solo di un esempio. Se vuoi importare, dovresti cercare di ottenere il processo inverso.
Le classi, i metodi e le proprietà che puoi utilizzare nel processo di importazione te le ho già indicate...ora sta a te vedere come utilizzarli.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
il fatto è che è una matrice!![]()
ciao alka, ho trovoato il modo per importarmi un file di testo tabulato in una Tstrring grid.
mi serve solo una chicca rapidissima:
la tabella visualizza il contenuto del file SOLO dopo il click su di essa.
vorrei invece che il contenuto fosse mostrato ISTANTANEAMENTE non appena il pannello che contiene la tabella viene visualizzato.
On Enter, non funziona...
grrazie
Prova a richiamare il metodo Invalidate della StringGrid...magari è solo un problema di rinfresco della visualizzazione.
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
niente non funziona.
tieni conto che io ho uato l'evento PannelloENTER...
A questo punto, dimmi come hai caricato i dati nella griglia.
Usando le proprietà della StringGrid -teoricamente- dovrebbe provvedere essa stessa ad autoaggiornarsi per visualizzare il nuovo contenuto delle celle...
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
così:
la cosa che accade è che se clicco su QUALSIASI componente oltre che alla tabella il contenuto viene visualizzato!codice:procedure Pannello Enter(Tsender:object) var Data: TextFile; r: integer; c: integer; f1: string[5]; f2: integer; begin AssignFile(Data, 'strGrid.txt'); Reset(Data); r := 0; with StringGrid1 do try while not EOF(Data) do begin inc(r); RowCount := r+1; c := 0; Cells[0,r] := IntToStr(r); while not EOLn(Data) do begin if c = 0 then Read(Data, f1) else Read(Data, f2); inc(c); if c+1 > ColCount then ColCount := c+1; if c = 1 then Cells[c,r] := f1 else Cells[c,r] := IntToStr(f2); end; ReadLn(Data); end; finally CloseFile(Data); end;