Obiekt TStringGrid i dopisywanie jego wiersza do pliku .csv

dział ogólny

Obiekt TStringGrid i dopisywanie jego wiersza do pliku .csv

Nowy postprzez scrobik » wtorek, 8 czerwca 2010, 21:43

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;

  }
Avatar użytkownika
scrobik
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): wtorek, 8 czerwca 2010, 21:26
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder Enterprise Suite Ver. 6.0
Gadu Gadu: 5744883
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » środa, 9 czerwca 2010, 07:26

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;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez scrobik » środa, 9 czerwca 2010, 19:16

A zadziałało. Dzięki 8-)
Avatar użytkownika
scrobik
Bladawiec
Bladawiec
 
Posty: 6
Dołączył(a): wtorek, 8 czerwca 2010, 21:26
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder Enterprise Suite Ver. 6.0
Gadu Gadu: 5744883
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 15 gości