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 | 1939 (1506) | amacar |
| » | Statistika dijakov, pomocOddelek: Programiranje | 1974 (1458) | Mitja Bonča |
| » | Pomoc pri nalogiOddelek: Programiranje | 2187 (1993) | FuI2cY |
| » | [C#] izdelava tabeleOddelek: Programiranje | 2086 (1912) | majoneza |
| » | c++ datotekeOddelek: Programiranje | 4266 (3755) | Vesoljc |
