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

seekg() - problem z użyciem

Object Storage Arubacloud
0 głosów
350 wizyt
pytanie zadane 26 stycznia 2020 w C i C++ przez Agnes Użytkownik (990 p.)
Funkcja nie działa mimo załączenia biblioteki <fstream> w Visual Studio 2019. Da się to jakoś naprawić? Był komunikat o tym, że nie ma szablony klasy std::basic_istream, ale po dodaniu biblioteki <istream>, w której ta klasa jest zdefiniowana problem wciąż jest.

A może jest jakaś alternatywa dla tej funkcji?
komentarz 26 stycznia 2020 przez Agnes Użytkownik (990 p.)
W ten pierwszy sposób. No tak...Dzięki za pomoc
komentarz 26 stycznia 2020 przez tangarr Mędrzec (154,860 p.)
Pierwszy sposób nie ma sensu. Nawet gdyby taka funkcja istniała to skąd by miała wiedzieć, że ma użyć twojego strumienia?
komentarz 26 stycznia 2020 przez Agnes Użytkownik (990 p.)
Rzeczywiście nie ma. Przy okazji, ta funkcja przesuwa kursor w pliku o jeden bajt, czyli w praktyce o jeden znak, więcej jeśli chcę, żeby kursor znalazł się tuż przed następnym słowem to muszę to ustawić "ręcznie", czy jest też na to gotowa funkcja?
komentarz 26 stycznia 2020 przez tangarr Mędrzec (154,860 p.)
Nic takiego nie przychodzi mi na myśl. Jeżeli nie znasz struktury pliku to takie skakanie bez szklanej kuli wydaje mi się niemożliwe. Najlepiej czytać plik znak po znaku, aż znajdziesz ciekawy fragment. Jeżeli potrzebujesz pobrać aktualną pozycję w pliku użyj funkcji tellg http://www.cplusplus.com/reference/istream/istream/tellg/
komentarz 26 stycznia 2020 przez niezalogowany

@Agnes,
 a może jednak lepiej użyć getline (strumien, string, '$');

struct slowo{
string word;
}

istream & operator >> (istream & in, slowo & s){
getline(in,s.word,'$');
return in;
}

z pliku o treści:"wouwoio oiw  $biuhiuHIU  $AIOHHIAOHO A$ "

do word powinno wczytać 
obj slowo slowo1 // wouwoio oiw  
obj slowo slowo2 // biuhiuHIU  
obj slowo slowo3 // AIOHHIAOHO A

 

1 odpowiedź

+1 głos
odpowiedź 26 stycznia 2020 przez tangarr Mędrzec (154,860 p.)

Udało się nam znaleźć rozwiązanie w komentarzach pod pytaniem dlatego dla czystej formalności dodaję odpowiedź.
Żeby użyć funkcji seekg trzeba ją wywołać na obiekcie. Przykład:
 

#include <iostream>
#include <fstream>
  
int main() {
    std::fstream in;
    in.open("in1.txt");
    in.seekg(3, std::ios::cur);
    return 0;    
}

 

Podobne pytania

0 głosów
1 odpowiedź 333 wizyt
0 głosów
0 odpowiedzi 334 wizyt
0 głosów
1 odpowiedź 267 wizyt

92,753 zapytań

141,672 odpowiedzi

320,387 komentarzy

62,100 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

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!

...