C++ nacitaní z CSV souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ nacitaní z CSV souboru – C / C++ – Fórum – Programujte.comC++ nacitaní z CSV souboru – C / C++ – Fórum – Programujte.com

 

thifferx0
Newbie
4. 12. 2016   #1
-
0
-

Zdravím všechny,

Před pár týdny, kdy jsem měl zadanou úlohu, tak jste mi všichni v mnohém pomohli, a tak hledám pomoc ale s jiným příkladem. 

Dostal jsem úlohu viz. zadání: http://www.imgup.cz/image/L9Ep

Při programování jsem se zasekl na vytvoření funkce pro načtení csv souboru (můj csv soubor: http://www.imgup.cz/image/L9FG)

Potřebuji načíst ty údáje ze souboru a uložit je do pole struktur, abych potom mohl s nima pracovat. Taktéž nevím jestli jdu na to dobře s tou cestou toho souboru. Protože úkol máme odevzdávat do složky vstupnidata. Nevím ale jestli jdu na to dobře a trošku jsem se v tom ztratil. Taktéž jestli jsem vůbec dobře zvolil vstupní data (co se týče duplicity - kvůli pozdějšího počítání - teda jestli jsem správně pochopil zadání). Byl by někdo ochotný mi pomoct, popostrčit nebo poradit?

Můj kód:

http://pastebin.com/ek1hcrcY

Předem děkuji za jakýkoliv příspěvek

Nahlásit jako SPAM
IP: 85.135.103.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2016   #2
-
0
-

Čas a dráha nejsou stringy, takže nemůžeš přes getline načítat přímo do nich. Načti to jinak nebo jinam.

Místo pole s pevnou délkou použij dynamické pole, nebo vektor.

Načítáš ze souboru/streamu do pole. Co jsou ty nesmysly okolo?

Toto jsi napatlal úplně bez přemýšlení, ani se to nezkompiluje. Neměl jsi to ukazovat :)

Nahlásit jako SPAM
IP: 213.211.51.–
thifferx0
Newbie
4. 12. 2016   #3
-
0
-

#2 gna
čas a dráhu musím tedy ještě přetypovat? Ty nesmysly okolo myslíš ještě asi tu cestu k tomu souboru , kterou nwm jak udělat - prostě tak aby to nebyl jen vstup.csv, ale tak ať je to ve složce vstupnisoubory/vstup.csv - třeba.

Nejdřív překopu tu funkci a až potom zkusím štěstí s tou cestou.

Nahlásit jako SPAM
IP: 85.135.103.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2016   #4
-
0
-

Ta funkce dostane stream nebo jméno souboru. Nevím o co se tam pokoušíš se dvěma streamy.

Pokud na všechno použiješ getline, tak si vytvoř pomocný string, do kterého načteš ty čáselné údaje a pak je zkonvertuj. Nebo můžeš využít toho, že tam už to nebude žrát ten středník a načíst to přímo.

struct jizda {
    string prijmeni;
    string jmeno;
    double cas;
    double draha;
};

typedef vector<jizda> zaznamjizd;

bool nacteni_csv(istream &stream, zaznamjizd &zaznam)
{
	zaznam.clear();

	jizda jizda;
	while (getline(stream, jizda.prijmeni, ';') &&
	       getline(stream, jizda.jmeno, ';') &&
	       stream >> jizda.cas && stream.get() == ';' &&
	       stream >> jizda.draha && (stream.eof() || stream.get() == '\n'))
	{
		zaznam.push_back(jizda);
	}

	return stream.eof();
}
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
4. 12. 2016   #5
-
0
-

Název toho souboru můžeš normálně zadat s cestou.

ifstream file("cesta/soubor");

Případně s proměnnými.

string cesta, nazev;
...
ifstream file(cesta + "/" + nazev);
Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
4016 příspěvků
6. 12. 2016   #6
-
0
-

Ale to neni nacitani csv souboru! To je pekne osizene. Zkus si ulozit z excelu csv , pridej tam nekolik mezer, apostrofu, stredniku do bunek a pak to zkus tihle precist. Csv ma jasna pravidla
- oddelovac bunek, treba ; (a)
- oddelovac radku \n (b)
- uvozovka, escape " (c)
- a v bunce "text;text" (c-a-c)
- b v bunce "text\ntext" (c-b-c)
- c v bunce "text""text" (c-cc-c)
Ty to proste natvrdo sekas podle stredniku. No, aby ses casem nespalil u slozitejsich csv.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:6c46:60...–
gna
~ Anonymní uživatel
1891 příspěvků
6. 12. 2016   #7
-
0
-

Taky nemám rád šizené řešení, ale cílem toho cvičení asi není složitější parsování csv a zbytečně by se v tom topil.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Čtení z CSV souboru — založil Hanmir1

Úprava souborů v csv — založil Povl

Convert csv souboru do databaze — založil kall_ell

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý