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…
nr47
(Sawyer47)
14 Październik 2008 19:37
#2
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)
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;
}
}
Kaka2
(Kaka_117827603)
15 Październik 2008 19:39
#4
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.