Skocz do zawartości

Wczytywanie lini z pliku txt do zmiennych


Moldis

Rekomendowane odpowiedzi

Otóż zająłem się dziś obsługą plików .txt w c++.. i wszystko niby pięknie ładnie.. ale nie wiem jak wczytać wybraną linie pliku.. np. w pierwszej lini mam: Daniel w drugiej 17 a w trzeciej Krakow.. jak mam wczytać np. drugą czy trzecią linię..

ifstream plik("D:\\tekst.txt"); plik >> pytanie;

Odnośnik do komentarza
Udostępnij na innych stronach

Żeby przeskakiwać o linijkę do przodu możesz zrobić sobie taką funkcje(nowsza wersja xD):

void nextLine(ifstream& plik)
{
    char c;
    do{ plik.read(&c, 1); } while(c != '\n'); //dopóki c nie jest końcem linii idź dalej
}

żeby przejść np. do 5 linii możesz zrobić:

plik.seekg(0, ios_base::beg); //powrót do początku pliku
for(int i =0; i < 5; i++) nextLine(plik);

 

edit:

Posiedziałem nad tym trochę i zrobiłem taką klasę:

class FileReader
{
public:
    FileReader(const char* name) : file(name), line(0) { }
    template <typename T>
    void operator >>(T& v) { file >> v; }
    void move(int t)
    {
        if(line + t < 0)
        {
             line = 0;
             file.seekg(0, std::ios_base::beg);
             return;
        }

        line += t;
        if(t > 0) //jeśli jest większe niż zero to idziemy do przodu
        {
            for(; t > 0; t--)
            {
                 char c;
                 do{ file.read(&c, 1); } while(c != '\n'); 
             }
             return;
        }
        if(t < 0) //jeśli jest mniejsze to idzemy do tyłu
        {
             for(; t > 0; t--)
             {
                  while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy do początku tej linii
                file.seekg(-1, std::ios_base::cur); //przeskakujemy znak końca linii
                  while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy się do początku poprzedniej linii
                  file.seekg(1, std::ios_base::cur); //przeskakujemy znak końca linii
              }
         }
    }
    void goTo(unsigned int l)
    {
        move(l - line); //idzemy do tej linii
        line = l;
    }
    unsigned int getLine() { return line; }
    std::ifstream* getFile() { return &file; }
private:
    unsigned int line;
    std::ifstream file;
};

Nie sprawdzałem jej bo nie mam teraz kompilatora, ale powinna działać.

Odnośnik do komentarza
Udostępnij na innych stronach

ie.. nie wiem czemu ale mam jakiś problem z funkcją ; d

nie wiem do końca jak ją mam zdefiniować..

void nextLine(plik);

bo jak zrobie tak to wywala stos błędów, a jak nie podam argumentu to wywala jeden o tym że funkcja nie zajmuje jednego argumentu o,o

1>.\helo1.cpp(33) : error C2660: 'nextLine' : function does not take 1 arguments
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...