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.
_alex
([alex])
14 Listopad 2012 14:07
#2
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.
system
(system)
14 Listopad 2012 15:14
#3
Wymyśliłem coś takiego:
1.Wyszukuje w tekście liczbę
Przepisuję łańcuch znaków na vektor int(każdy kolejny element jest kolejną cyfrą)
Mnoży każdy kolejny element vektora przez 10^i.
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.
Rolek0
(Rolek0)
14 Listopad 2012 17:26
#4
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.
etam
(etam)
14 Listopad 2012 21:09
#5
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ć?
drobok
(Drobok)
14 Listopad 2012 21:26
#6
Ty chyba czegoś nie zrozumiałeś To nie był przykład całego tekstu, tylko fragmentu tekst
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 ?
_alex
([alex])
14 Listopad 2012 23:09
#7
etam:
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ć?
Miałem na mysli:
Ala ma 3 kotów
to jest:
Text_1
To nie da rady poprawnie to odczytać.
Wymyśliłem coś takiego: 1.Wyszukuje w tekście liczbę 2. Przepisuję łańcuch znaków na vektor int(każdy kolejny element jest kolejną cyfrą) 3. Mnoży każdy kolejny element vektora przez 10^i. 4. 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.
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?
_alex
([alex])
16 Listopad 2012 00:12
#9
A nawet za ciebie została napisana.