» »

c++ ?!?

c++ ?!?

sifu ::

ok..problem je tak..imam nek fajl z recimo 200 vrsticami nekega besedila...rd bi naredu program k bi se ustavu pri deseti besedi "neboticnik" jo shranil v neko spremenljivko in potem preskocil recimo dve besedi in tretjo spet shranil v neko drugo spremenljivko...

gre za te fukcije z fajl pointerji k mi niso cist jasne....a bi lohk kdo to mau bolj razlozu al vsaj na easy primer naredu da bi mi blo jasn...

v bistvu me zanima kako se po fajlu premikat do dolocenega besedila ter kako preskociti ene par znakov itd..

hvala za odgovore 8-)

webblod ::

Torej,

za delo z datotekami, moramo v program vključiti zaglavje FSTREAM.H, kjer so definirani trije razredi za delo z datotekami:
ifstream - odpre datoteko samo za branje,
ostream - odpre datoteko samo za zapisovanje(pri čemer izbriše celotno dotedanjo vsebino datoteke)
fstream - odpre datoteko za branje in pisanje (ne izbriše obstoječe vsebine).

Za delo z datotekami torej kreiramo predmet, npr. Datoteka. Najbolj enostavno podatke iz datoteke prebiramo s postopkom get().

Preprost program za branje iz datoteke bi torej bil:

#include "fstream.h" // tukaj bi sicer morali biti znaki > in >, ampak jih požre ta mrcina od HTML
#include "iostream.h"

int main(){

fstream Datoteka ("ImeDatoteke.txt");

while (Datoteka.good()){
char Znak = Datoteka.get();
if (Znak == 32){
Datoteka.seekg(Datoteka.tellg() + 9); // 9 je crk v besedi neboticnik
char Znak = Datoteka.get();
if (Znak == 32){
Datoteka.seekg(Datoteka.tellg() - 9);
for (int i = 0; i < 9; i++){
}

// tukaj sedaj spišemo kodo
// za prepisovanje niza v
// spremenljivko

cout << Znak; // jaz pa bom izpisal znak na ekran

}
}
Datoteka.close();
return 0;
}


Toliko o branju iz datoteke in premikanju po njej.
Program bo torej izpisal vse besede, kjer je med dva presledka ujeto 9 znakov...
Niti pod razno ni kak blesteč program, vendar pa osnovo pokaže...

Drug, bolj udoben način pa bi bil prepisati celo datoteko v spremenljivko tipa String in se lepo potem s pomočjo metode find sprehajati po string-u.

LP
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

wintermute ::

Takole bi slo brez izumljanja tople vode:

#include &ltiostream&gt
#include &ltfstream&gt
#include &ltstring&gt

using namespace std;

int main()
{
ifstream inFile("input.txt");
// error checking !!

istream_iterator&ltstring&gt ii(inFile);

// default istream_iterator oznacuje konec vnosa
istream_iterator&ltstring&gt eof;

// preberi 10. besedo:
int wordCount = 0;
while ((wordCount++ &lt 9) && (ii != eof)) ++ii;
string desetaBeseda = *ii;

// preskoci dve besedi
++ii;
++ii;

string trinajstaBeseda = *(++ii);

cout &lt&lt desetaBeseda &lt&lt ", " &lt&lt trinajstaBeseda << "n";
}


Ce hoces iskati posamezne besede (neucinkivito, ce to pocnes kar v datoteki) uporabis
npr. algoritem std::find (&ltalgorithm&gt header) nad istream_iteratorji, na primer:


istream_iterator&ltstring&gt location(inFile);
location = find(ii, eof, "neboticnik");

if (location != eof)
{
// nasli smo "neboticnik"

// ...
}




Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program ki upravklja s programom

Oddelek: Programiranje
222224 (1056) MrBrdo
»

c++ datoteke

Oddelek: Programiranje
464044 (3533) Vesoljc
»

problem v c++ kako prebrati matriko?

Oddelek: Programiranje
131399 (1216) robinzon
»

Loopy problem

Oddelek: Programiranje
281469 (978) snow
»

Pac sm butl !!!!!

Oddelek: Programiranje
71380 (1022) Phil

Več podobnih tem