Forum » Programiranje » c++ DODAJANJE elementov iz datoteke v vektor
c++ DODAJANJE elementov iz datoteke v vektor
Androm3da ::
Pozdravljeni, napisati moram funkcijo, ki iz datoteke prebere seznam datumov (oblika: leto mesec dan), vrne pa vektor datumov.
Primer vhodne vrstice v datoteki (datumi.txt):
2014 3 1
2014 1 29
2012 3 22
Zdej pa bi mene zanimalo kako bi jaz lahko dodal seznam datumov v vector. Moram najprej dodat seznam v objekte in pol
dodam objekte v vektor al kako bi se lotil naloge. Če ima mogoče kdo kakšen nasvet?
Primer vhodne vrstice v datoteki (datumi.txt):
2014 3 1
2014 1 29
2012 3 22
Zdej pa bi mene zanimalo kako bi jaz lahko dodal seznam datumov v vector. Moram najprej dodat seznam v objekte in pol
dodam objekte v vektor al kako bi se lotil naloge. Če ima mogoče kdo kakšen nasvet?
ragezor ::
naredis struct datum z polji leto, mesec, dan (al pa ce ma C++ ze kaksen vgrajen struct za datume?)
potem preberes vrstico po vrstico, ustvarjas datum structe iz prebranega in te structe dodajas v vektor.
potem preberes vrstico po vrstico, ustvarjas datum structe iz prebranega in te structe dodajas v vektor.
Androm3da ::
class Datum { private: int leto; int mesec; int dan; }; class Tabela { private: vector<Datum> seznam_Datumov; public: ... } main: string line; ifstream datoteka("datumi.txt"); Tabela TabelaDatumov(); if(datoteka.is_open()) { while(getline(datoteka, line)) { cout << line << endl; //tukaj bi potem mogel narditi da bi mi v } // objekt shranjevalo leto mesec in dan datoteka.close(); }
Pol praviš da bi shtanjeval posamično v polja dan[], mesec[], leto[]?? ve mogoče kdo kako rešiti,bi bila mogoče kakšna funkcija od fstream uporabna, ali podobno...
Mavrik ::
Saj imaš dobro idejo in si dobro začel. Zdaj samo moraš za vsako vrstco ustvariti nov Datum objekt in ga dati v vector :)
The truth is rarely pure and never simple.
mallard ::
Predlagam, da overloadaš operator>> za Datum razred. Tako boš lahko napisal:
Poglej si, kako se to naredi, pa vprašaj, če kaj ne bo šlo.
Pa mimogrede, tole:
je deklaracija funkcije, ki nima parametrov in ki vrne razred Tabela. Kar rabiš je eno od sledečega:
Datum d; while( datoteka >> d ) { seznam_datumov.push_back(d); }
Poglej si, kako se to naredi, pa vprašaj, če kaj ne bo šlo.
Pa mimogrede, tole:
Tabela TabelaDatumov();
je deklaracija funkcije, ki nima parametrov in ki vrne razred Tabela. Kar rabiš je eno od sledečega:
Tabela TabelaDatumov; Tabela TabelaDatumov = TabelaDatumov(); Tabela TabelaDatumov {};
Zgodovina sprememb…
- spremenilo: mallard ()
Androm3da ::
Hvala vsem za pomoč :D
Zdej trenutno kaj me muči je da bi rad vpisoval elemente it datoteke v objekte, pozneje ko to zrihtam pa pol še v vektor. Če mogoče kdo vidi kaj delam narobe??
to mi pa izpiše:
//zdej mam leto,dan,mesec tipa char, če imam jih pa tipa int mi pa izpiše -neka števila, tak da ima kdo kakšno idejo?
Zdej trenutno kaj me muči je da bi rad vpisoval elemente it datoteke v objekte, pozneje ko to zrihtam pa pol še v vektor. Če mogoče kdo vidi kaj delam narobe??
to mi pa izpiše:
string line; ifstream datoteka("vhod.txt"); Tabela TabelaDatumov(); int st_datumov = 0; if(datoteka.is_open()) { while(getline(datoteka, line)) { //cout << line << endl; st_datumov++; } cout << endl; Datum* datumi = new Datum[st_datumov]; for(int i = 0; i < st_datumov; i++) { datoteka >> datumi[i].leto >> datumi[i].mesec >> datumi[i].dan; } for(int i = 0; i < st_datumov; i++) { cout << datumi[i].leto << datumi[i].mesec << datumi[i].dan << endl; } datoteka.close(); } else cout << "Datoteka ne obstaja" << endl;
//zdej mam leto,dan,mesec tipa char, če imam jih pa tipa int mi pa izpiše -neka števila, tak da ima kdo kakšno idejo?
class Datum { public: char leto; char dan; char mesec;
Zgodovina sprememb…
- spremenilo: Androm3da ()
Tutankhamun ::
#include "iostream" #include "sstream" #include "fstream" #include "vector" class CDate { public: friend std::istream& operator>>(std::istream& os, CDate& cd); friend std::ostream& operator<<(std::ostream& os, const CDate& cd); private: int m_year; int m_day; int m_month; }; std::istream& operator>>(std::istream& os, CDate& cd) { os >> cd.m_year >> cd.m_month >> cd.m_day; return os; } std::ostream& operator<<(std::ostream& os, const CDate& cd) { os << "year: " << cd.m_year << ", month: " << cd.m_month << ", day: " << cd.m_day << std::endl; return os; } class CDateTable { public: CDateTable(); int Read(const char *fname); void Display(); private: std::vector<CDate> m_dates; }; CDateTable::CDateTable() { m_dates = std::vector<CDate>(); } int CDateTable::Read(const char *fname) { std::fstream fstr; CDate cd; fstr.open(fname); if (!fstr.is_open()) { return -1; } while (!fstr.eof()) { fstr >> cd; m_dates.push_back(cd); } fstr.close(); return 0; } void CDateTable::Display() { std::vector<CDate>::iterator iter; for (iter = m_dates.begin(); iter != m_dates.end(); ++iter) { std::cout << (CDate)*iter; } } int main(int argc, char *argv[]) { CDateTable dtab; dtab.Read("datumi.txt"); dtab.Display(); return 0; }
AMD Phenom QUAD 9950 Black Edition, 8GB
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Pomoč pri programiranju v C++Oddelek: Programiranje | 1808 (1375) | amacar |
» | Statistika dijakov, pomocOddelek: Programiranje | 1777 (1261) | Mitja Bonča |
» | Pomoc pri nalogiOddelek: Programiranje | 2003 (1809) | FuI2cY |
» | [C#] izdelava tabeleOddelek: Programiranje | 1987 (1813) | majoneza |
» | c++ datotekeOddelek: Programiranje | 4037 (3526) | Vesoljc |