Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » TStringGrid speichern?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.07.2006, 16:04 Uhr
_johannes



Hallo,

ich habe verschiedene Werte über Editfelder in StringGrid1 eingelesen und möchte diese nun speichern und wieder öffnen können.

Wie ist dies möglich, habe irgendwas von einer .bak datei gehört. Wäre auch nicht schlecht mit Excel darauf zugreifen zu können. Bitte um Hilfe

Gruß Joe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2006, 20:08 Uhr
Bruder Leif
dances with systems
(Operator)


Das hatten wir doch schon mal... hast Du schon im Forum gesucht?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.07.2006, 21:38 Uhr
_johannes



Ja, der einzige mit einem ähnlichen Problem, hat keine Antwort erhalten. Eine ausführliche Beschreibung wäre sehr schön. Danke schon mal in vorraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: