Strona 1 z 1

Obiekt TStringGrid i dopisywanie jego wiersza do pliku .csv

Nowy postNapisane: wtorek, 8 czerwca 2010, 21:43
przez scrobik
Nie mogę sobie poradzić. Mianowicie funkcja zaprezentowana na forum, odpowiedzialna za zapisywanie zawartości obiektu StringGrid do pliku .csv działa super. Dla przypomnienia jest poniżej. Mój obiekt StringGrid składa się z jednego wiersza i chcę aby za każdym podczas wywoływania zapisywania funkcji FileSaveClick dane z wiersza StringGrid były dopisywane do kolejnych wierszy arkusza pliku csv, tak abym nie tracił poprzednich danych już tam zapisanych. Proszę o przeróbkę tej funkcji. Za pomoc z góry dziękuję i pozdrawiam

Kod: Zaznacz cały
void protokol::SaveToFile(AnsiString FileName, TStringGrid *Grid,
        bool csv)
{
TStringList *Lista = new TStringList;
String txt_1 = "", txt_2 = "";

if(!csv)
Lista->Add("\"Col" + (AnsiString)Grid->ColCount +  "\";\"ROW" + (AnsiString)Grid->RowCount  + "\"");

for(int i = 0; i < Grid->RowCount; i++)
{
  for(int j = Grid->ColCount - 1; j >= 0; j--)
  {
   String temp = Grid->Cells[j][i];
   if(temp.SubString(temp.Length(), temp.Length() + 1) == ";")
    temp = Grid->Cells[j][i] + "'";
   if(!csv)
    txt_1 = ";\"" + temp + "\"" + txt_1;
   else
    txt_1 = "\"" + temp + "\";" + txt_1;

   if(!csv && i == 0)
   {
    txt_2 = (AnsiString)Grid->ColWidths[j] + ";" + txt_2;
    if(j == 0)
    Lista->Add(txt_2);
   }
  }
  Lista->Add(txt_1);
  txt_1 = "";
}

Lista->SaveToFile(FileName);
delete Lista;

  }

Re: Obiekt TStringGrid i dopisywanie jego wiersza do pliku .csv

Nowy postNapisane: środa, 9 czerwca 2010, 07:26
przez Cyfrowy Baron
Problem ogranicza się w zasadzie do wczytania zawartości pliku *.csv do obiektu typy TStringList przed dodaniem do niego zawartości. Jeżeli funkcja ma zapisywać dane tylko to pliku CSV to można usunąć z niej zbędne elementy, co sprawi, że będzie bardziej przejrzysta.

Kod: Zaznacz cały
void protokol::SaveToFile(AnsiString FileName, TStringGrid *Grid,
            bool csv)
{
    TStringList *Lista = new TStringList;
   
    if(FileExists(FileName)) Lista->LoadFromFile(FileName); // wczytanie pliku

    String txt_1 = "";

    for(int i = 0; i < Grid->RowCount; i++)
    {
      for(int j = Grid->ColCount - 1; j >= 0; j--)
      {
       String temp = Grid->Cells[j][i];
       if(temp.SubString(temp.Length(), temp.Length() + 1) == ";")
        temp = Grid->Cells[j][i] + "'";
 
        txt_1 = "\"" + temp + "\";" + txt_1;
      }
      Lista->Add(txt_1);
      txt_1 = "";
    }

    Lista->SaveToFile(FileName);
    delete Lista;
}

Re: Obiekt TStringGrid i dopisywanie jego wiersza do pliku .csv

Nowy postNapisane: środa, 9 czerwca 2010, 19:16
przez scrobik
A zadziałało. Dzięki 8-)