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

Efektywne pobieranie danych z pliku

Ostatnio zmodyfikowano 2017-04-05 22:12
Autor Wiadomość
michal11
» 2017-04-03 23:00:24
Nic nie stoi na przeszkodzie żebyś sobie wymyślił swój własny format, ale skoro możesz skorzystać ze znanych i sprawdzonych rozwiązań (do których istnieją już edytory, biblioteki itp.) to czemu tego nie zrobić?
P-159762
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-04-03 23:47:09
@seamonster
Aha to super :D
Proste i klarowne. Ostatnie pytanie. Wszystko bede zapisywal do jednego stringa (całą linie w ktorej beda 4 slowa i 2 zdania) po czym bede je rozdzielal, czyli kazde slowko/zdanie do osobnego stringa. Jak to zrobic? Poruszac sie wskaznikiem po stringu i dopisywac kolejne jego literki do innego, dopóki nie trafie na przecinek, albo koniec stringa?

@michal11
Wlasnie zastanawialem sie, jak sie tworzy wlasne formaty, ale tak jak mowisz, uzyje czegos z juz dostepnych:)
P-159763
Saran
» 2017-04-04 00:53:31
Parę wskazówek jeśli będziesz chciał stworzyć własny format:
http://www.fileformat.info/mirror/egff/ch08_04.htm#CH08-DMYID.4 (przewiń na dół)
P-159764
j23
» 2017-04-04 10:33:04
Jak to zrobic? Poruszac sie wskaznikiem po stringu i dopisywac kolejne jego literki do innego
Już pisałem - użyj getline do czytania kolejnych wartości.

Przykład dla
slowkopl;slowkopl;zdanie pl;slowkoniem;slowkoniem;zdanie niem
:
C/C++
using rec_t = array < string, 6 >;

ifstream ifs(...);
vector < rec_t > v;

while( ifs )
{
    rec_t rec;
   
    for( int i = 0; i < 5; ++i )
         getline( ifs, rec[ i ], ';' );
   
    getline( ifs, rec[ 5 ], '\n' );
   
    if( ifs.fail() ) break;
   
    v.push_back( move( rec ) );
}

for( auto r: v )
for( auto s
        : r )  cout << s << '\n';

P-159767
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-04-04 15:44:15
Ahhh no tak, zapomniałem, że getline ma argument domniemany - domyślnie znak nowej linii :)
Dzięki za pomoc. Jak skończę albo będę miał problem, to napisze. Tymczasem dzięki!

EDIT:

Usiadłem do kodu, ale co do getline - niestety prawdopodobnie nie będę mógł go użyć. Zakładając, że w jednej kategorii jest powiedzmy ok. 30 fiszek, czyli 180 stringów (120 słówek i 60 zdań ). Chce zrobić coś takiego, że użytkownik klikając odpowiedni przycisk będzie otrzymywał kolejną, albo poprzednią fiszkę:

Plik zwierzeta:

pies, psy,nie mam psa, Der Hund, Die Hunde, Ich habe keinen Hund
kot, koty, kocham mojego kota, Die Katze, Die Katzen, Ich liebe meine Katze

Użytkownik widzi fiszkę dotyczącą psa. klika przycisk "nastepna" i widzi fiszkę z kotem.

* moge użyć getline, ale będę zmuszony otwierać, wczytywać i zamykać plik.

* mogę wczytać wszystkie fiszki przy wybieraniu kategorii do jednego vectora string. Następnie, kiedy będzie to potrzebne, będę z tego vectora wydobywał
  poszczególne zestawy 4słowa2zdania i rozdzielał. Wydaje mi się, że druga opcja jest wydajniejsza (tylko raz otwieramy plik i wczytujemy). Tylko jak w tym         
  przypadku rozdzielać te zestawy na słowa?

Co do drugiego sposobu jest jeszcze jeden plus - nie poruszam się po pliku lecz po vectorze co jest ławiejsze.

Wybrałem 2 sposób :)

@J23
Nie chcę używać ifstream, nigdy o nim nie czytałem i na razie nie chce się w to bawić :/
P-159774
Monika90
» 2017-04-04 16:58:45
Wczytaj wszystko do wektora, ale nie do wektora stringów.

C/C++
struct Fiszka
{
    std::string slowo_polskie;
    std::string zdanie_polskie;
    std::string slowo_niemieckie;
    std::string zdanie_niemieckie;
    //itp...
};

std::vector < Fiszka > fiszki;


Nie chcę używać ifstream, nigdy o nim nie czytałem i na razie nie chce się w to bawić :/
A czego innego chciałbyś użyć?
P-159775
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-04-04 18:25:37
noo... normalnego fstream a nie Ifstream.
Do vectora stringów wczytuje tylko na chwile, bo są to składnie typu:
slowo,slowo,slowo,slowo,zdanie,zdanie
Dopiero kiedy którejś potrzebuje, to rozdzielam ją na mniejsze elementy (słowa i zdania, bez przecinków). W każdym razie już i tak zrobiłem to w ten sposób, więc problem rozwiązany.
Dziękuję wszystkim za pomoc :)
P-159777
j23
» 2017-04-04 18:28:51
@latajacaryba, przecież w moim kodzie wszystko (tzn. cały plik) jest czytane do vectora, więc możesz sobie po tych fiszkach "chodzić" i wprzód, i w tył.

normalnego fstream a nie Ifstream.
Do czytania z pliku to żadna różnica.
P-159778
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona