• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Odczyt z pliku

Object Storage Arubacloud
0 głosów
632 wizyt
pytanie zadane 14 marca 2016 w C i C++ przez Maciek123233 Gaduła (3,400 p.)

Witam, jestem dość młody jeśli chodzi o programowanie więc podejrzewam że to dość proste pytanie.

Mam plik abc.txt gdzie zapisane jest:

Lin1
Lin2
Lin3
Lin4
Lin5

Potrzebuję odczytać konkretnie linię 3 (nie 1, 2 i 3). I nie wiem jak.

Z góry dziękuję :)

2 odpowiedzi

0 głosów
odpowiedź 15 marca 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
wybrane 11 czerwca 2016 przez Maciek123233
 
Najlepsza

Nie można od razu odczytać linii 3. Musisz zaczynać od początku, linijka po linijce. Tworzysz pętlę, która wykona się 3 razy i za każdym razem wczyta kolejną linię, zastępując poprzednią. Przykład:

ifstream plik( "abc.txt" );
string linia;

for( int i = 0; i < 3; i++ )
{
     getline( plik, linia );
}

cout << "Linia trzecia: " << linia;

Przy większych programach, nie zapomnij w pętli umieścić dodatkowego warunku: plik.eof(). Robisz to w taki sposób:

ifstream plik( "abc.txt" );
string linia;

while( !plik.eof() )
{
getline( plik, linia );
     cout << "Wczytano: " << linia << endl;
}

Program wypisze wszystkie linie i zakończy wczytywanie, gdy napotka koniec pliku (end-of-file). To jest bardzo ważne, bo inaczej program może wypluć błąd ;-)

PS. W swoich przykładach użyłem zapisu: ifstream plik( "abc.txt" ); 
Mogłeś się z taką formą zapisu nie spotkać. Alternatywą jest napisanie:

fstream plik;
plik.open( "abc.txt", ios::in );
komentarz 15 marca 2016 przez Macek Kolo Mądrala (5,480 p.)
komentarz 15 marca 2016 przez Maciek123233 Gaduła (3,400 p.)
Dzięki, już w miare rozumiem o co chodzi :)
komentarz 15 marca 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
@Macek Kolo Podana przez Ciebie funkcja przesuwa wskaźnik odczytu o zadaną liczbę znaków. W przypadku, gdy chcemy wczytać trzecią linijkę, to nie wiemy o ile znaków przesunąć. Poza tym podałeś funkcję ze standardu C. Pisząc z bibliotekami C++ należałoby korzystać z funkcji ifstream::seekg(). http://www.cplusplus.com/reference/istream/istream/seekg/ Ale znów, to tylko przesunięcie o zadaną liczbę znaków :-(
0 głosów
odpowiedź 15 marca 2016 przez MILLERTdev Użytkownik (900 p.)
Jesli chcesz trzecią linię zapisać np do stringa i tylko tę jedną to da się to łatwo zrobić. Utwórz zmienną i równą 1. W whilu wczytuj dane i co każdą iterację inkrementuj i. Stwórz warunek if, który sprawdza czy i jest równe oczekiwanej wartości (3). Jeżeli prawda - zapisz ją do jakiegoś stringa. No i tyle.

Podobne pytania

0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 4 czerwca 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
+4 głosów
2 odpowiedzi 15,116 wizyt
0 głosów
1 odpowiedź 275 wizyt

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...