[C++] Odczyt wybraniej linii z pliku .txt

Witam

Mam problem, chciałbym wyświetlić w Label1 kilka linii tekstu pobranych z pliku 1.txt.

Poniższy program pobiera tylko pierwszą linie. Jak zrobić aby program pobrał np. tylko 4 linie?

Oto przykład pliku 1.txt.

Oto 1 zdania.

Oto 2 zdanie.

Oto 3 zdanie.

void __fastcall TForm1::Button1Click(TObject *Sender) { 

   std::fstream plik;

  plik.open("1.txt",std::ios::in|std::ios::out);

  if(plik.good()==true)

  {

  std::fstream plik("1.txt",std::ios::in);

  char bufor[255];

  plik.getline (bufor,255);//wczytuje tyle danych ile się zmieści do bufora

  Label1->Caption=bufor;

  }

}

Program wyświetla tylko 1 linie. Jak wyświetlić np. tylko drugą linię? Pomocy…

Faktycznie czyta 255 bajtów, a nie linię. Do wczytywania linii może posłużyć string::getline(). Jeżeli chcesz więcej razy do po prostu daj w pętelkę pod jakimś warunkiem np. eof(), a właściwie możesz użyć w warunku getline(), zobacz:

http://www.cppreference.com/wiki/io/eof

A mógłbyś podać to na tym przykładzie?

// Połączono posty.

w tym przypadku, wyświetla nam się ostatni napis (pętla 4) :frowning:

pomóżcie…

void __fastcall TForm1::Button1Click(TObject *Sender)

{

std::fstream plik("1.txt",std::ios::in);


std::string tab[5];

std::string a;



for (int m=1; m<=5; m++)

{

getline(plik,tab[m]);


a=tab[m];


   int n;

   char ch[255];

   for (n=0; n<=254; n++)

       {

       ch[n]=a[n];

       }


Memo1->Text=ch;

}


 }

Osobiście mam na to tylko jeden pomysł - skorzystać z getline, pętli i jakiegoś licznika, który będzie liczył, którą linijkę wczytujesz.

fstream plik(...);

string test;

int licznik = 0;

while(getline(plik, test))

{

licznik++;

if(licznik > 4)

{

break;

}

// tutaj sobie robisz co chcesz z wczytanym tekstem

}

Oczywiście zamiast obiektu klasy std::string, możesz sobie użyć chociażby typu char.

//EDIT

Zapomniałem wyżej dać licznik++, ale już poprawiłem.