Načtení konkrétních dat ze souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Načtení konkrétních dat ze souboru – C / C++ – Fórum – Programujte.comNačtení konkrétních dat ze souboru – C / C++ – Fórum – Programujte.com

 

ORION2060
Newbie
12. 4. 2017   #1
-
0
-

Ahoj,

potřeboval bych nutně pomoci PROSÍM jak načíst data z texťáku. Konkrétně jde o soubor s 10 mil. řádků v sedmi sloupcích, jde o to že bych potřeboval vždy načíst jen třeba pět řádku a s těmi daty pracovat a tak dále, aby se vždy nenačetl celý soubor.

Bohužel se učím C++ úplně sám do zaměstnání a nějak nechápou, že se to učím a zadávají mi věci ke kterým jsem ještě nedošel. :-) Prosím neporadil by mi někdo z čeho se nejlépe učit? Koupil jsem si Mistrovství v C++ 4. vydání. Akorát kniha je moc obsáhlá a nestíhám se v ní prokousávat tak rychle. 

Případně bych někoho rád poprosil o komunikaci skrze SZ, pokud bude tak ochotný (rád v případě pomoci pošlu i nějakou kačku).

Děkuji za případné rady a pomoc.

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

Pokud mají ty řádky všechny stejnou délku, tak můžeš použít istream::seekg pro posun na požadovanou pozici. Jinak prostě ten soubor musíš projít.

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

Nemohl by jsi být prosím trošku konkrétnější. Asi bych potřeboval pomoci se strukturou toho kodu, respektive moc nevím jak to napsat.

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

Můžu, ale nevím, které části nerozumíš.

soubor.seekg(cisloradku * delkaradku);
Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
12. 4. 2017   #5
-
0
-

   

int linesize = 10, firstline = 234, linecount = 5;

std::ifstream is("test.txt", std::ifstream::binary);

if (!is.seekg(firstline * linesize))
	jetorozbity;

char linedata[linesize];

for (int i = 0; is && i < linecount; ++i)
{
	if (!is.read(linedata, linesize))
		jetorozbity;
	...
}
Nahlásit jako SPAM
IP: 213.211.51.–
ORION2060
Newbie
12. 4. 2017   #6
-
0
-

Zkusil jsem napsat toto:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    string line;
    ifstream myfile;
    myfile.open("data.txt");
    if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
            cout << line << '\n';
        }
        myfile.close();
    }

    else cout << "Unable to open file";

    return 0;
}

Respektive s pomocí googlu. Ale při načítání souboru mi to rovnou skočí na else a soubor se mi nenačte. Soubor mám u exe souboru, zkoušel jsem zadat i přímou cestu, ale nejde to. Mám tam někde chybu prosím?

Nahlásit jako SPAM
IP: 89.176.56.–
ORION2060
Newbie
12. 4. 2017   #7
-
0
-

Zkusil jsem ve VS spustit ladění programu a vypisuje mi to tyto chyby:

https://gyazo.com/76ae34d16f2cb1f47713905b28804505

je možné, že mi v PC chybí knihovny a proto to nefunguje?

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

Zjevně jsi s C++ teprve začal, tak v práci řekni, že ještě několik měsíců nic slušného nevyplodíš.

Chybějící PDB systémových knihoven jsou v pořádku.

Pracovní adresář programu ve VS je adresář projektu. Můžeš to změnit v nastavení, nebo ten soubor přesunout, nebo program spustit mimo VS.

Nahlásit jako SPAM
IP: 213.211.51.–
ORION2060
Newbie
12. 4. 2017   #9
-
0
-

No právě že tam ten soubor mám, ale prostě se nenačte.

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

Píšeš, že ho máš u exáče. Ten bývá v podadresáři projektu (nejspíš Debug).

Pokud zadáváš celou cestu, tak nezapoměň zdvojit zpětná lomítka.

Nahlásit jako SPAM
IP: 213.211.51.–
KIIV
~ Moderátor
+43
God of flame
12. 4. 2017   #11
-
0
-

#1 ORION206
a ty ses na tu praci hlasil jako programator? Jen me to tak zajima jestli jsi vubec nekdy neco programoval.

Kazdopadne prace se soubory jsou absolutni zaklady. Nejvic chyb se da opravdu nasekat hlavne temi "escape sekvencemi", jelikoz zpetne lomitko ma v retezcich specialni vyznam a musi se tedy zdvojit. Pripadne ze Visual Studio nepouziva jako work directory ten podadresar Debug ci Release.

Pracovni adresar programu se da pomerne snadno zjistit pomoci prikazu GetCurrentDirectory (asi neco z WinApi (windows.h)). Existuji i veci jako Boost - coz je kolekce knihoven snad na vse, co si vzpomenes a jeste funguje multiplatforme, ale tim se asi zatim moc nezatezuj. Nebo, pokud se citis moc zacatecnicky, tak si proste vytvor soubor s nejakym dobre dohledatelnym nazvem a najdi, kde se skutecne vytvoril.

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ORION2060
Newbie
13. 4. 2017   #12
-
0
-

Ahoj,

no spíše to je součást úplně jiné pozice (stavebnictví) a abych to dostal musel jsem na to kývnout. Nicméně rád se to naučím, ale asi ne během dvou týdnu, že. :-) Studuju mistrovství v C++ a googlim, ale prostě pokud mi to někdo vysvětlí, tak je to mnohem jednodušší se pak něco učit. Kniha je hodně obsáhlá a věci, které potřebuju jsou někde vzadu, než se k tomu dostanu tak to zabere spoustu času a potřeboval bych se posouvat mnohem rychleji no.....

Každopádně díky za reakce, soubor se mi už načetl, teď na to musím nabalit dalším milion věcí, tak snad to zvládnu. :-)

Nahlásit jako SPAM
IP: 91.139.6.–
Jerry
~ Anonymní uživatel
512 příspěvků
13. 4. 2017   #13
-
0
-

A ta firma co u ní děláš .. oni ti jako platí výplatu ? Každý měsíc ? ... hm.. dej sem email na někoho z té firmy. Já se tma taky přihlásím jako progrmátor. Práce je málo ... .. znáš to ne ?

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:c109:...–
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, 107 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ý