[C/C++] Odczytywanie wybranych danych z plików

Mam plik txt, który w skrócie ma format:

Text_1 liczba Text_2 liczba2 Text3 długi ciąg liczb EOF

Potrzebuję wyciągnąć z tego np. Liczba2 żeby wiedzieć jak dużą tablicę zrobić dla danych, które są podawane później.

Czy ktoś może mnie nakierować jak to zrobić. Otwieranie plików w miarę ogarniam ale przy odczytywaniu danych robią się schody.

Co rozumiesz pod pojęciem tekst?

Czy to:

Ala ma 3 kotów

jest tekstem?

jeżeli tak to nie ma możliwości poprawnego odczytania tej liczby.

Wymyśliłem coś takiego:

1.Wyszukuje w tekście liczbę

  1. Przepisuję łańcuch znaków na vektor int(każdy kolejny element jest kolejną cyfrą)

  2. Mnoży każdy kolejny element vektora przez 10^i.

  3. Sumuje elementy vektoru i zapisujemy do int.

5.Włala!

Prawie na pewno można to napisać lepiej, ale to jedyne na co wpadłem.

Jeśli dane są na stałym offsecie to wystarczy przesunąć wskaźnik pliku.

Natomiast gdy mogą występować pod różnymi offsetami (dla danych w formacie tekstowym jest to niemal zawsze prawda) to musisz odczytać poprzednie dane by wiedzieć gdzie zaczynają się te, których szukasz.

Jest to możliwe, aczkolwiek bardzo uciążliwe. Trzeba wczytywać po znaku i sprawdzać, czy znak jest cyfrą (w dużym uproszczeniu). Może warto by zmienić format pliku, żeby było wygodniej na nim operować?

Ty chyba czegoś nie zrozumiałeś :stuck_out_tongue: To nie był przykład całego tekstu, tylko fragmentu tekst :stuck_out_tongue:

Ala ma 3 kotów 7 7x etam 476 1

I jak z tego wyciągniesz 1, nie wiedząc ile cyfr / spacji jest po drodze ?

Miałem na mysli:

Ala ma 3 kotów

to jest:

Text_1

To nie da rady poprawnie to odczytać.

Co to ma wspólnego z pytaniem w temacie?

Jeżeli tekst to jedno lub kilko słów nie zawierających cyfr to, definiujesz taką funkcję:

istream &nodig(istream &s) { while((s)&&(!isdigit(s.peek())) s.get(); return s; }

odczytujesz z pliku:

ifstream plik("c:\plik.txt");

double liczba1,liczba2;

plik>>nodig>>liczba1>>nodig>>liczba2>>nodig; // odczytano liczba1,liczba2

while(plik)

  {

   double liczba;

   plik>>liczba; // odczytano kolejną liczbę z ciągu liczb

  }

plik.close();

Tak jest, dodatkowo liczby ktore potrzebuje wystepuje po okreslonych slowach. Patrzac na wasz dyskusje domyslam sie ze mozna napisac funkcje ktora bedzie szukala konkretnego ciagu znakow i po nim liczby?

A nawet za ciebie została napisana.