Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wczytanie ostatniego wiersza z pliku tekstowego

Ostatnio zmodyfikowano 2013-08-14 20:53
Autor Wiadomość
tothk2a11
Temat założony przez niniejszego użytkownika
wczytanie ostatniego wiersza z pliku tekstowego
» 2013-08-14 19:53:33
C++ - początkujący.

Szukam sposobu na rozwiązanie problemu, jak w temacie.
Z tego co znalazłem w kursach napisałem poniższy kod:
C/C++
string const dane( "d:/dane200000000.txt" );
// łańcuch znaków - miejsce lokalizacji pliku

string wiersz; //łańcuch znaków - w którym znajduje się pobrany wiersz

ifstream strumien( dane.c_str() ); // strumień do miejsca odczytu
strumien.seekg( - 84, ios::end );
// ustawienie kursora na końcu pliku i przeniesienie
// kursora 84 znaki od końca pliku

getline( strumien, wiersz );
// pobranie wiersza od miejsca w którym znajduje sie kursor

cout << wiersz << "\n"; //wyświetla pobrany wiersz
Przedstawiony fragment kodu działa, ale ma pewne niedociągnięcia. Nie jest wrażliwy na zmianę liczby znaków w ostatnim wierszu w pliku.

Fragment ten powinien pobierać dane w formacie:            
6 1, 6, 3, 43, Pro, 6, 7, Met, 9, 1, Ser, 12, 3, Ala, 15, 56, Ile,
88 3, 6, 8, 43, Gln, 22, 7, Cys, 9, 1, Thr, 12, 3, Val, 15, 50, Leu,
337 22, 6, 8, 43, Arg, 92, 29, Tyr, 9, 1, Phe, 12, 3, Gly, 15, 50, Glu,
Jak widać liczba znaków nie jest stała.

Próbowałem użyć:
C/C++
wiersz.length() //liczy liczbę znaków w wierszu, ale dopiero po pobraniu,
ale to nie ma sensu bo liczy tylko po pobraniu danych, a nie wiem ile znaków zawiera ostatni wiersz w pliku(liczba nie jest stała).

Szukam podpowiedzi jak to można zrealizować lub pobrać same liczby z ostatniego wiersza i umieścić je w zmiennych.

**************************
Sorki że pisze na raty i dopisuje, stronka podczas pisania mi się wieszała. pewnie wina przeglądarki.
P-90293
megatron
» 2013-08-14 19:56:44
tak??? ;)
P-90294
MrPoxipol
» 2013-08-14 20:11:50
Aha. Znalazłeś. Więc mamy Ci pogratulować, tak?
P-90296
pekfos
» 2013-08-14 20:20:50
Wczytuj linie od początku, zachowaj ostatnią i ją sparsuj (np std::istringstream).
P-90300
tothk2a11
Temat założony przez niniejszego użytkownika
» 2013-08-14 20:35:19
Zastanawiałem się na początku nad takim rozwiązaniem, problem polega na tym że po
jednorazowym uruchomieniu programu w rejestrze powinno znajdować się około 10^10 wierszy. A cały rejestr będzie wymagał kilkudziesięciu uruchomień programu.
Powodowało by to że program jakiś czas szukał by tylko ostatniego wiersza. A chciał bym tego uniknąć. 
P-90301
pekfos
» 2013-08-14 20:37:55
To określ sobie maksymalną długość wiersza, odejmij od końca pliku i od tego miejsca szukaj ostatniej linii.
P-90303
tothk2a11
Temat założony przez niniejszego użytkownika
» 2013-08-14 20:46:12
Znaczy się w programie za wygenerowanym wierszem dodać w pętli określoną ilość spacji.

Tak żeby wiersz miał zawsze takom samom liczbę znaków ???

Jeśli dobrze zrozumiałem.

Jeśli tak to mam jeszcze jedno pytanie, czy sapcie (puste znaki) wpływają na rozmiar danych w pliku.
P-90304
pekfos
» 2013-08-14 20:49:43
Nie. Linia nie może mieć, na przykład, 200 znaków, ale szybciej przerobić do 200 znaków, niż cały plik.

czy sapcie (puste znaki) wpływają na rozmiar danych w pliku.
Ale trudno sprawdzić. Poza tym, że to oczywiste..
P-90306
« 1 » 2
  Strona 1 z 2 Następna strona