[C++] Wczytywanie do stringgrida

Witam.

Mam program z 6-kolumnowym StringGridem. StringGrid jest postaci: http://img179.imageshack.us/img179/2679 … ridha8.png

W programie jest funkcja zapisu do pliku tekstowego ale potrzebuję również odczytu.

Zapisany tekst wygląda tak:

Lp.1, Nazwa: xxx, Ilosc: 2, Cena Netto[zł]: 11, Podatek: 3%, Cena Brutto[zł]: 22,66

Wszystko kończy się na tym, że wczytam tekst z tego pliku do Memo.

Jak mam przepisać poszczególne wartości z Memo do kolumn ze StringGrida?

Z góry dziękuję za pomoc.

jeżeli zapisałbyś plik txt tylko parametrami to bez problemu można odczytac parametr 1,2,3,4 z pliku a poźniej wstawić go na odpowiednie współrzedne w

gridzie , z tego co kojarze w builderze można zapisać też strukture grida jako obiekt txt i potem go odczytać ale nie jestem pewien.

Aha. Ale ja muszę zrobić wczytywanie właśnie z tak zapisanego pliku :? . Jak to zrobić?

  1. Wpisujesz zawartość Memo do stringu BUF.

  2. Znajdujesz w stringu BUF ciąg znaków “\r\n” funkcja strstr dla C++ lub #13#10 funkcja Pos dla Delphi

  3. Wycinasz napis przed tymi znakami do osobnego stringu ROW, ze stringu BUF usuwasz razem ze znakami konca

  4. Znajdujesz w stringu ROW ciąg znaków “Lp.”, a od znalezionego miejsca szukasz ciągu znaków “,” pomiędzy będzie Lp

  5. jak wyżej … "Nazwa: " …

  6. jak wyżej … "Ilosc: " …

  7. jak wyżej … "Cena Netto[zł]: " …

  8. jak wyżej … "Podatek: " …

  9. jak wyżej … "Cena Brutto[zł]: " …

  10. jeżeli długość BUF jest większa niż 0 to przejdź do pkt 2.

A mógłbyś to przykładowo zapisać do Lp. bo wiem wiem o co Ci chodzi ale nie bardzo wiem jak się do tego zabrać.

Nie podałeś języka programowania :stuck_out_tongue:

Sorka, już widzę:

AnsiString Parse(AnsiString &buf,const AnsiString &delim)

  {

   int P=buf.Pos(Delimeter);

   AnsiString Result;

   if(P>0) { Result=buf.Copy(1,P-1); buf.Delete(1,P+delim.Length()-1); }

   else { Result=buf; buf.SetLength(0); }

   return Result;   

  }


AnsiString buf=...;

while(buf.Length()>0)

  {

   AnsiString row=Parse(buf,"\r\n");

   Parse(row,"Lp.");

   AnsiString Lp=Parse(row,",");

   Parse(row,"Nazwa: ");

   AnsiString Nazwa=Parse(row,",");

   Parse(row,"Cena Netto[zł]: ");

   AnsiString Netto=Parse(row,",");

   Parse(row,"Ilosc: ");

   AnsiString Ilosc=Parse(row,",");

   ...

  }

W tej chwili nie mam jak skompilować, więc mogą być drobne błędy.

W temacie zapisane jest [C++].

Zamiast:

AnsiString Lp=Parse(row,",");

można spróbować:

int Lp=Parse(row,",").ToIntDef(-1); // jeżeli jest liczba to skonwertuje, w przeciwnym przypadku będzie -1;

Zamiast:

AnsiString Netto=Parse(row,",");

można spróbować ( ToDoubleDef() - nie istnieje ) :

double Netto=-1; try { Netto=Parse(row,",").ToDouble(); } catch(...) {}

ale raczej tego nie potrzebujesz ponieważ do stringgrida i tak napisy wkładasz.