Pereiti prie turinio

C++ Prolemos su skaitymu is failo


Rekomenduojami pranešimai

Pas tave buvo taip:

void Pamoka::Deti(string klase, string diena, int nr, string pamoka){
       klase=klase;
       diena=diena;
       nr=nr;
    pamoka=pamoka;
}

 

This pointeris nurodo pačios klasės kintamąjį. Kadangi tavo metode parametrų vardai nesiskiria nuo klasėje aprašytų vardų, kompiliatorius galvoja, kad tu dirbi su metodo parametrais, o ne klasės kintamaisiais.

Nu nezinojau, siaip galvojau kad taip galima, bet pasikeiciau i kitus vardus

 class Pamoka
   {
   private:
            string klase;
            string diena;
            int nr;
            string pamoka;
   public:
           void Deti(string klase, string diena, int nr, string pamoka);
            string ImtiKlase(){return klase;}
            string ImtiDiena(){return diena;}
            int ImtiNr(){return nr;}
            string ImtiPamoka(){return pamoka;}
   };
   //-----------------------------------------------------------------------------
   void Pamoka::Deti(string kl, string di, int nrr, string pa){
            klase=kl;
            diena=di;
            nr=nrr;
     pamoka=pa;
   }

ir kaip visada programa uzlusta...

Sunkiai kazkaip su tuo nusakaitymu einasi. Paziuresiu dar C++ klasiu teorijos, nes gali buti kad ir cia kazkokia klaidele yra.

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, turiu dabar jau tikrai rimta problema.

yra tekstinis failas

2a monday 1 history 2 math 3 biology 4 x
2a tuesday 1 math 2 history 3 art 4 music
2a wednesday 1 biology 2 history
2a thursday 1 math 2 programming 3 art
2a friday 1 math 2 x
2b monday 1 math 2 biology 3 art 4 x
2b tuesday 1 art 2 math 3 biology 4 x
2b wednesday 1 biology 2 geography 3 music
2b thursday 1 histrory 2 math 3 art
2b friday 1 music 2 technology 3 art

ir kaip dabar visa tai man nuskaityti? Didziausia problema yra tai kad kiekvienoje eiluteje yra skirtingas kiekis pamoku. Tad kaip tai padaryti? P.S del praeito failo tai paskaites kryvas teoriju su pavyzdziais atradau va ka (nezinau tikiuosi kazkam bus naudinga). Bet kaip daryti ta kita nuskaityma?

void Skaityti1(const char CD1[], Pamoka p[], string & klase, string & diena, int & nr, string & pamoka, int & n){
ifstream fd(CD1);
n = 0;
string x;
while(!fd.eof()){
	fd >> klase >> diena >> nr >> pamoka;
	// getline(fd, pamoka, ',');
	// fd >> ws;
	p[n++].Deti(klase, diena, nr, pamoka);
}
fd.close();

Nuoroda į pranešimą
Dalintis kituose puslapiuose

while(!fd.eof()){
               fd >> s1 >> s2;
	while(fd.peek() != '\n')   //ar nesibaige eilute
	  fd >> int >> s3;
       }

Nezinau, bet nemanau kad sis metodas tinkamas mano nurodytu atveju. Juk kiekviena diena yra skirtingas pamoku skaicius. As ir galvoju ar isvis imoanoma toki duomenu faila nusiskaityti. be to kas tie s1, s2 yra?

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nezinau, bet nemanau kad sis metodas tinkamas mano nurodytu atveju. Juk kiekviena diena yra skirtingas pamoku skaicius. As ir galvoju ar isvis imoanoma toki duomenu faila nusiskaityti. be to kas tie s1, s2 yra?

o tu pabandyk bent, viskas veikia, viskas čia tinka..

 

while(!fd.eof()){
               fd >> klase >> diena;
               while(fd.peek() != '\n')   //ar nesibaige eilute
                 fd >> nr >> pamoka;
               }

Redagavo Sharpaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

int n = 0;
while(!fd.eof()){
   fd >> p[n++].ImtiKlase() >> p[n++].ImtiDiena();
while(fd.peek() != '\n')
     fd >> p[n++].ImtiNr() >> p[n++].ImtiPamoka(); // fd >> p[n++].ImtiNr() (>> meta klaida)
p[n++].Deti(klase, diena, nr, pamoka);

visas kodas

http://pastebin.com/nSEe3FLm

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

visi tie 'Imti' metodai gražina reikšmę, o ne ją paima <_<

int n = 0;
string klase, diena, pamoka;
int nr;
while(!fd.eof()){
   fd >> klase >> diena;
       while(fd.peek() != '\n' && !fd.eof()) {
            fd >> nr >> pamoka;
            p[n++].Deti(klase, diena, nr, pamoka);
            }
}

Redagavo Sharpaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

visi tie 'Imti' metodai gražina reikšmę, o ne ją paima <_<

int n = 0;
string klase, diena, pamoka;
int nr;
while(!fd.eof()){
   fd >> klase >> diena;
       while(fd.peek() != '\n' && !fd.eof()) {
            fd >> nr >> pamoka;
            p[n++].Deti(klase, diena, nr, pamoka);
            }
}

WOW labai dekoju. Nuskaite ne visai taip (tik paskutinias pamokas) bet nuskaite! Internete visai nieko apie ta fd.peek() nera. Kas cia per daiktas? Beje ka daryti kad butu nusakityta visos pamokos?

post-80785-0-92330900-1380034201_thumb.jpg

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

WOW labai dekoju. Nuskaite ne visai taip (tik paskutinias pamokas) bet nuskaite! Internete visai nieko apie ta fd.peek() nera. Kas cia per daiktas? Beje ka daryti kad butu nusakityta visos pamokos?

Nuskaito viską, tik tu pats į konsolę išvedi tik paskutinę eilutę :D

 

Beje, 98 eilutėj n++ pametei

 

http://www.cplusplus.com/reference/istream/istream/peek/

Redagavo Sharpaz
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kitaip sakant netinkamas sakitymo budas? Ar kaip.

Na tai ar visai nesupranti, kas vyksta? Paprasčiausiai kiša viską į masyvo 0 elementą, nes n nesikeičia. Skaito viską (pasitaisau), bet į tą pačią vietą, todėl duomenys užrašomi „ant viršaus“...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na tai ar visai nesupranti, kas vyksta? Paprasčiausiai kiša viską į masyvo 0 elementą, nes n nesikeičia. Skaito viską (pasitaisau), bet į tą pačią vietą, todėl duomenys užrašomi „ant viršaus“...

Visa esme yra tame kad man ir pliusinus ta n nuskaito tik paskutine pamoka ir skaiciu

post-80785-0-51401000-1380046949_thumb.jpg

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...