Forum » Programiranje » c++ Branje dolocene vrstica iz .txt-ja
c++ Branje dolocene vrstica iz .txt-ja
worxer ::
Lep pozdrav, jaz želim napisati program za viselce, in v txt formatu naj bi ble napisane razlicne besede, vsaka v svoji vrstici.
Jaz bi pa celel, da bi si program sam izbral vrstico iz .txt datoteke.
Upam da razumete, kaj mislim :)
Jaz bi pa celel, da bi si program sam izbral vrstico iz .txt datoteke.
Upam da razumete, kaj mislim :)
snow ::
Naključno vrstico?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
worxer ::
Da vrstico program izbere sam ...
TXT fajl:
neki
beseda
beseda2
krneki
Prgram pa nakljucno zbere eno iz med teh besed in pove. oz. shrani v string beseda.
TXT fajl:
neki
beseda
beseda2
krneki
Prgram pa nakljucno zbere eno iz med teh besed in pove. oz. shrani v string beseda.
snow ::
Random: http://www.cplusplus.com/reference/clib...
Število vrstic moraš poznat, potem pa zgeneriraš naključno število in prebereš tisto vrstico.
Število vrstic moraš poznat, potem pa zgeneriraš naključno število in prebereš tisto vrstico.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
ERGY ::
technolog ::
Tole je bl simpl kot si misliš...
Greš po celi datoteki znak po znak in šteješ nove vrstice, sepravi "\n" -je. Ko naletiš na tisti "\n", ki se ujema z ižrebano številko, začneš zajemat do naslednjega "\n"-ja. Skratka maš 3 vrstice kode.
Greš po celi datoteki znak po znak in šteješ nove vrstice, sepravi "\n" -je. Ko naletiš na tisti "\n", ki se ujema z ižrebano številko, začneš zajemat do naslednjega "\n"-ja. Skratka maš 3 vrstice kode.
Tutankhamun ::
ifstream file; string vrstica; file.open("bla bla"); getline(file, vrstica);
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
workser je napisal, kako se prebere vrstico. Drgač je pa že dobu odgovor v zasebnih sporočilih.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
technolog ::
Ja, samo to je zelo neefektivno, če bi takole bral vrstive, šele n-to (n je naključno število) pa zapisal. Ker se vsakič kliče konstruktor za string.
worxer ::
Naredil sem ... da mi prešteje št. vrstic, pa da random zbere eno izmed vrstic, zdj mam pa problem ... z izpisom tiste vrstice :D
switch(igralcev) { case 1 : cout << "Igrali boste sami." << endl; cout << "Izbiranje besede in stetje vrstic ..." << endl; if (besede.is_open()) { while( besede.good() ) { while(getline (besede, beseda, '\n')){ stVrstic++; } cout << "Vrstic je: " << stVrstic << endl; izpisi_vrstico = rand() % stVrstic + 1; cout << "Izbral sem vrstico: " << izpisi_vrstico << endl; getline (besede,beseda); if(izpisi_vrstico == stevilka) { cout << beseda << stevilka << endl; besede.close(); break; } stevilka++; } } else cout << "Nemorem odpreti datoteke!" << endl; break;
Tutankhamun ::
Tehnolog neefektiven si ti, mogoče bi lahko kr v asemblerju kodo za branje napisu.
To je za šolo. Manj vrstic ko napišeš, manjša verjetnost je za napako.
To je za šolo. Manj vrstic ko napišeš, manjša verjetnost je za napako.
AMD Phenom QUAD 9950 Black Edition, 8GB
technolog ::
Ok, I challenge you.
Napiš ti svojo verzijo in jaz bom napisal z manj vrsticami (po svoji metodi).
Napiš ti svojo verzijo in jaz bom napisal z manj vrsticami (po svoji metodi).
Zgodovina sprememb…
- spremenil: technolog ()
Tutankhamun ::
Challenge accepted :).
U bistvu je tiste kode samo 3 vrstice. Program je delal v prvo, brez debug-iranja :D.
+ samo na zacetku prebere datoteko, potem je ne potrebuje vec (vse je v memoriji)
+ malo kode
+ malo verjetnosti za napako
- bo tehnolog povedu
najdu napakco :)
int main(int argc, char* argv[]) { std::vector<std::string> vStrLine; std::ifstream iFile; std::string strLine; unsigned int iSelectLine; iFile.open("y:\\test.srt"); if (!iFile.is_open()) { std::cout << "Can't open file" << std::endl; return -1; } while (iFile.good()) { getline(iFile, strLine); vStrLine.push_back(strLine); } iFile.close(); while (true) { std::cout << "Select line 1-" << vStrLine.size() << " (0 for exit): "; std::cin >> iSelectLine; if (iSelectLine == 0) break; if ((iSelectLine-1) >= vStrLine.size()) { std::cout << "Max line is " << vStrLine.size() << std::endl << std::endl; } else { std::cout << "Line content: " << vStrLine[iSelectLine-1] << std::endl << std::endl; } } return 0; }
U bistvu je tiste kode samo 3 vrstice. Program je delal v prvo, brez debug-iranja :D.
+ samo na zacetku prebere datoteko, potem je ne potrebuje vec (vse je v memoriji)
+ malo kode
+ malo verjetnosti za napako
- bo tehnolog povedu
getline(iFile, strLine); vStrLine.push_back(strLine); std::cout << "Line content: " << vStrLine[iSelectLine-1] << std::endl;
najdu napakco :)
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
Tutankhamun ::
worxer, ne se hecat. Takoj nad tabo sm napisu celo kodo. Prepiš pa zažen, da boš vidu kako dela. Cele 3 vrstice maš no.
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
Un njegov programček je pa že tko FAIL. Najprej prebere vse vrstice, pride do konca datoteke, pol pa spet bere vrstico... Sanja se mi ne kaj je hotu narest.
worxer uzem program, pa tam kjer imam js izpis narejen (to je usa koda po iFile.close()), dodaj svojo kodo. Vsebino vrstice dobiš takole: strLine = vStrLine[iSelectLine];, kjer je iSelectLine številka vrstice od 0 do kolikor je vrstic - 1. Če pa to ne gre, pol pa nevem kaj nj rečem.
Js pa še kr čakam tehnologa :D.
worxer uzem program, pa tam kjer imam js izpis narejen (to je usa koda po iFile.close()), dodaj svojo kodo. Vsebino vrstice dobiš takole: strLine = vStrLine[iSelectLine];, kjer je iSelectLine številka vrstice od 0 do kolikor je vrstic - 1. Če pa to ne gre, pol pa nevem kaj nj rečem.
Js pa še kr čakam tehnologa :D.
AMD Phenom QUAD 9950 Black Edition, 8GB
Zgodovina sprememb…
- spremenil: Tutankhamun ()
worxer ::
hoto sm narest ... d pravo pršteje besede ... pol zbere random vrstico, pol pa naj bi uno vrstico ko je prebrau izpisau ... :)
Torej, strLine = vStrLine[iSelectLine]
iSelectLine ... je vrjetno intiger ne? (številka vrstice, katero js želim)
kaj je strLine pa vStrLine?
Torej, strLine = vStrLine[iSelectLine]
iSelectLine ... je vrjetno intiger ne? (številka vrstice, katero js želim)
kaj je strLine pa vStrLine?
Tutankhamun ::
Sej je v moji kodi napisan kaj je kej. StrLine je string, vStrLine pa je vektor kjer so shranjene vrstice. Vektor si predstavli kot polje vrstic. Dodat mores se #include "vector".
AMD Phenom QUAD 9950 Black Edition, 8GB
Tutankhamun ::
Zakaj nočeš pogledat v mojo kodo?
Pomeni da je to "polje" ki sprejema stringe. Recimo podobn kod bi napsiu string vBeseda[100];. Samo podobn, da me ne bo kdo napadu.
vector <string> vBeseda;
Pomeni da je to "polje" ki sprejema stringe. Recimo podobn kod bi napsiu string vBeseda[100];. Samo podobn, da me ne bo kdo napadu.
AMD Phenom QUAD 9950 Black Edition, 8GB
worxer ::
ok, tko sm naredu:
ampak, ko pride do vrstice: beseda = vBeseda[izpisi_vrstico];
se program zapre ...
case 1 : cout << "Igrali boste sami." << endl; cout << "Izbiranje besede in stetje vrstic ..." << endl; if(besede.is_open()) { if(besede.good() ) { while(getline (besede, beseda, '\n')){ stVrstic++; } } cout << "Vrstic je: " << stVrstic << endl; izpisi_vrstico = rand() % stVrstic + 1; cout << "Izbral sem vrstico: " << izpisi_vrstico << endl; besede.close(); beseda = vBeseda[izpisi_vrstico]; cout << beseda; system("pause"); } else cout << "Nemorem odpreti datoteke!" << endl; break;
ampak, ko pride do vrstice: beseda = vBeseda[izpisi_vrstico];
se program zapre ...
worxer ::
Pa ti si car!! :)
Mal sm se poglobiv v tvojo kodo ... pa mojo in sem sestavo tko k more bit :) hvala :)
Mal sm se poglobiv v tvojo kodo ... pa mojo in sem sestavo tko k more bit :) hvala :)
technolog ::
Tole je popolnoma funkcionalna koda... Tudi praktično 3 vrstice. Brez uporabe vektorjev in stringa sploh.
#include <iostream> #include <fstream> using namespace std; int main() { int stVrstice=3; //željena vrstica ifstream file("in.txt"); while(file.good()) { char c=file.get(); if (stVrstice==1) cout << c; if (c=='\n') stVrstice--; } }
Zgodovina sprememb…
- spremenil: technolog ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 18007 (8755) | black ice |
» | Program ne deluje več (strani: 1 2 )Oddelek: Programiranje | 6570 (5308) | Genetic |
» | c++ BRANJE IZ DATOTEKEOddelek: Programiranje | 2567 (1980) | Tutankhamun |
» | [C++] Problem z datotekami in sortiranjemOddelek: Programiranje | 1314 (943) | BigWhale |
» | c++ datotekeOddelek: Programiranje | 4039 (3528) | Vesoljc |