C++ citanie zo súboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ citanie zo súboru – C / C++ – Fórum – Programujte.comC++ citanie zo súboru – C / C++ – Fórum – Programujte.com

 

Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #1
-
0
-

Dobrý deň,

mám menší problém a dlhšie sa nad ním trápim. Učím sa programovať v C++ a sekol som sa na jednej veci. Neviem vytvoriť textovi súbor z ktorého by mi program načitával data a ani neviem kam ho mám uložiť aby to fungovalo.

Používam XCode na OSX a skúšal som dokumenty s príponou rtf, txt, doc atď. 

Viete mi niekto poradiť ako na to ?

Za všetky postrehy budem len vďační. 

Nahlásit jako SPAM
IP: 84.74.73.–
PiranhaGreg0
Stálý člen
18. 10. 2015   #2
-
0
-

Odpovědi znám, ale jak se říká, chybami se člověk učí. Předveď tedy svůj pokus a my ti povíme, co jsi kde udělal špatně...

Nahlásit jako SPAM
IP: 147.32.126.–
Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #3
-
0
-

Tak tu je program čo som napísal, ten by to mal načítať.

#include <iostream>

#include <fstream>

#include <cstdlib>

const int velkost = 100;

using namespace std;

int main()

{

    char meno_suboru[velkost];

    ifstream subor;

    cout << "Zadajte meno datoveho suboru: \n";

    cin.getline(meno_suboru, velkost);

    subor.open(meno_suboru);

    if(!subor.is_open())

    {

        cout << "Nepodarilo sa otvorit subor " << meno_suboru << endl;

        exit(EXIT_FAILURE);

    }

    double hodnota;

    double spolu = 0.0;

    int znak = 0;

    subor >> hodnota;

    while(subor.good())

    {

        ++znak;

        spolu += hodnota;

        subor >> hodnota;

    }

    if(subor.eof())

        cout << "Vyhodnotenie.\n";

    else if(subor.fail())

        cout << "Ziadne data.\n";

    if(znak == 0)

        cout << "Nespracovali sa data.\n";

    else

    {

        cout << "Pocet precitanych poloziek: " << znak << endl;

        cout << "Spolu: " << spolu << endl;

        cout << "Priemer: " << spolu/znak << endl;

    }

    subor.close();

    return 0;

}

A vytvoril som si súbor rtf a ulozil som ho do Xcode -> DerivedData -> Nazov môjho programu -> Build -> Products -> Debug.

Do súboru som si uložil tieto hodnoty: 18 19 22.9 20 333.09 2
                                                                 10 2.98 254 67

Ale program mi ich nechce načítať, tak neviem kde je problém.

Nahlásit jako SPAM
IP: 84.74.73.–
PiranhaGreg0
Stálý člen
18. 10. 2015   #4
-
0
-

Hlavní chyba je v tom RTF. RTF formát tam má vnitřně uložený různý další styly a načítáš pak blbosti. Ulož to do *.txt souboru  .

Jinak kód jsem ti trochu upravil i s vysvětlivkama... 

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
	// Jsme v C++, použijeme string :-)
	string fileName;

	// Načtení cesty k souboru do proměnné
	cout << "Zadajte meno datoveho suboru: ";
	getline(cin, fileName);

	// Otevření souboru pro čtení
	ifstream input(fileName);

	// Pokud se něco zvrtlo
	// (input vrací true, pokud je všechno v pohodě
	// a false, pokud nastalo eof, fail nebo bad)
	if (!input) {
		cerr << "Nepodarilo sa otvorit subor." << fileName << endl;
		return 1;
	}

	// Je zvykem pojmenovávat proměnné v angličtině...
	double sum = 0, current;
	int count = 0;

	// Dokud je vstup v pořádku, načítáme data :-)
	while(input >> current) {
		sum += current;
		count++;
	}

	// Každý otevřený stream je potřeba zase zavřít
	input.close();

	// Chyby by se měly vypisovat na standardní chybový výstup...
	if (input.bad()) {
		cerr << "Nespracovali sa data." << endl;
		return 1;
	}

	// Žádna data
	if (count == 0) {
		cout << "Ziadne data." << endl;
		return 0;
	}
	
	// Na odřádkování používej buď endl nebo \n, ale ne jednou tak a podruhý onak
	cout << "Pocet precitanych poloziek: " << count << endl;
	cout << "Spolu: " << sum << endl;
	cout << "Priemer: " << sum / count << endl;

	return 0;
}
Nahlásit jako SPAM
IP: 147.32.126.–
Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #5
-
0
-

Ďakujem za radu ale stále mi to nefunguje. Uložil som to v TexEdit ako txt formát. Ale keď spustím program tam mi to nechce načítať. Vypisuje vkuse Nepodarilo sa otvoriť súbor. 

Nahlásit jako SPAM
IP: 84.74.73.–
PiranhaGreg0
Stálý člen
18. 10. 2015   #6
-
0
-

Zkontroluj, že tvůj zkompilovaný program *.exe a ten *.txt jsou ve stejný složce. Pokud nejsou, je tam potřeba zadat celá cesta ke vstupnímu souboru. Tedy např. C:\Users\Micha\Documents\...\vstupni_data.txt

Nahlásit jako SPAM
IP: 147.32.126.–
Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #7
-
0
-

Ale hej mám ho v tej istej zložke ako je exec. A stále mi to nefunguje. 

Ale vytvoril som program čo uloži dáta do súboru. Ten súbor sa mi uložil tam isto ako je exec programu. Ten súbor nemá žiadnu koncovku súboru a keď kliknem naň a dam, informácie tak mi ukáže že je to súbor TexEdit a to je všetko.

A  ten súbor som len premenoval a uložil som tam svoje hodnoty aké som potreboval a, program mi aj tie hodnoti načítal.

Lenže ešte stále neviem vytvoriť vlastní txt alebo iný formát s ktorého by mi to ten program načítal. 

Kde môže byť problém ?

Nahlásit jako SPAM
IP: 84.74.73.–
PiranhaGreg0
Stálý člen
18. 10. 2015   #8
-
0
-

Těžko říct no... Můžeš na ten vstupní soubor kliknout pravým (a drž přitom levý shift) a vyber možnost copy as path a do programu pak dej natvrdo

string fileName = "zkopírovaná cesta";

s tím, že zakomentuješ ten kód na načítání cesty z konzole...

Nahlásit jako SPAM
IP: 147.32.126.–
Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #9
-
0
-

Nefunguje to. 

Nahlásit jako SPAM
IP: 84.74.73.–
PiranhaGreg0
Stálý člen
18. 10. 2015   #10
-
0
-

No budeš na to muset nějak přijít. Takhle na dálku mě nic nenapadá.

Nahlásit jako SPAM
IP: 147.32.126.–
Michal
~ Anonymní uživatel
683 příspěvků
18. 10. 2015   #11
-
0
-

Škoda lebo sa tým zaoberám už dlhšie a aj ine fóra som prezrel ale všade sú len návodi na Win a nie na OS X. Na XCode je toho veľmy málo.

Ďakujem za snahu.

Nahlásit jako SPAM
IP: 84.74.73.–
KIIV
~ Moderátor
+43
God of flame
19. 10. 2015   #12
-
0
-

Je jen par moznosti - nemas prava cist (napriklad se to spousti pod jinym uzivatelem, nez jsi vytvoril soubor), nebo to zkousi otevrit z jineho adresare, nez ocekavas (nebo to ten build adresar maze). Zadani absolutni cesty by melo zabrat. Treba: /tmp/soubor.txt

Pripadne ho vytvorit pokud neexistuje a zjistit, kde presne se vytvoril. Sice si tvrdil ze v tom buildu, ale kdo vi, jestli ses jen nespletl a ten soubor tam treba uz nebyl od tebe.

Na zjisteni pracovniho adresare taky muzes pouzit getcwd: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/getcwd.3.html

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Michal
~ Anonymní uživatel
683 příspěvků
19. 10. 2015   #13
-
0
-

#12 KIIV
No keď ty mam napísať pravdu tak sa v tom trošku strácam čo si mi napísal. C++ sa venujem asik len mesiac.

A ten súbor z ktorého to chcem načítať som si vytvoril tam kde sa mi vytvoril súbor z programu (keď mi program ukladal do súboru). 

Ale dýky za snahu. 

Nahlásit jako SPAM
IP: 84.74.73.–
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, 6 hostů

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ý