003
07.07.2006, 09:59 Uhr
Th
|
Hi, hier mal ein paar Zeilen Code zum Speichern (meine Klasse heißt TMDIChild):
C++: |
bool TMDIChild::SaveToFile(const AnsiString &sFilename) { TStringList *sList = new TStringList;
for(int i=0; i<StringGrid->RowCount; i++) { AnsiString sText = StringGrid->Cells[0][i]; for(int j=1; j<StringGrid->ColCount; j++) sText += "\t" + StringGrid->Cells[j][i]; sList->Add(sText); }
sList->SaveToFile(sFilename);
delete sList;
return true; }
|
Die Daten werden einfach in eine StringList kopiert und durch das Tabulator-Zeichen "\t" getrennt und dann in die Datei gespeichert.
Für das Lesen gibt es die entsprechende Funktion "LoadFromFile". Dann einfach die Daten umgekehrt in das String-Grid kopieren. Das einzige Problem ist dann das Parsen der Daten entsprechend des Trennzeichens, daher sind es mehrere Funktionen:
C++: |
void TMDIChild::LoadFromFile(const AnsiString &sFilename) { TStringList *sList = new TStringList;
sList->LoadFromFile(sFilename);
StringGrid->RowCount = sList->Count; StringGrid->FixedRows = (sList->Count > 1)? 1 : 0; StringGrid->ColCount = 1;
for(int i=0; i<sList->Count; i++) SetRow(StringGrid, i, sList->Strings[i]);
delete sList; }
void TMDIChild::SetRow(TStringGrid *grid, int nRow, const AnsiString &sText) { AnsiString sCellText; int nCol = 0; for(int i=1; i<=sText.Length(); i++) { if(sText[i] == '\t') { SetCell(grid, nCol, nRow, sCellText); nCol++; sCellText = ""; } else sCellText += sText[i]; } if(!sCellText.IsEmpty()) { SetCell(grid, nCol, nRow, sCellText); } }
void TMDIChild::SetCell(TStringGrid *grid, int nCol, int nRow, const AnsiString &sText) { if(nCol >= grid->ColCount) grid->ColCount = nCol + 1; grid->Cells[nCol][nRow] = sText; }
|
Die untere Funktion "SetCell" erhöht automatisch die Anzahl der Spalten, falls nötig.
Du kannst aber auch ein anderes Trennzeichen (z.B. ";") benutzen und dann die Strings in Anführungszeichen setzen und entsprechend parsen (s. CSV-Dateiformat). |