Witam, to moj pierwszy post, wczesniej radzilem sobie z c++ na moje potrzeby, ale ta petla nie dziala jak powinna

AnsiString text;
char *tok, *sep=";", *tmp;
int count = 0;
for(int i = 0; i <= Memo1->Lines->Count - 1; i++){
    text = Memo1->Lines->Text;
    tmp = text.c_str();
    int j = 0;
    do{
      tok = strtok(count++ ? NULL : tmp, sep);
      if(tok){
        Memo2->Lines->Add("[" + IntToStr(i) + "][" +IntToStr(j) + "]");
        StringGrid1->Cells[j][i] = tok;
        }
      j++;
      }while(j < 9); //tutaj powinen byc jeszcze warunek while(tok)
    if(j == 8) j = 0;
    }

Nie moge rozgryzc podwojnego warunku while, bo w sytuacji gdy zostawie tak jak jest teraz dodawane sa linie z Memo1 do 198 (jest ich lacznie 651), co juz samo w sobie jest dla mnie dziwne, a jesli zmienie warunek na while(tok), to owszem zczytuje calosc Memo1 ale licznik 'i' jest wciaz rowny 0, wiec do string grid->cells zapisywane jest tylko [j][0]

Rozwiazalem problem, pocialem wczytywany tekst na mniejsze czesci i juz dziala