Forum » Programiranje » 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
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
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
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
WEBblod.NET :: Slovenska programerska scena
wintermute ::
Takole bi slo brez izumljanja tople vode:
Ce hoces iskati posamezne besede (neucinkivito, ce to pocnes kar v datoteki) uporabis
npr. algoritem std::find (<algorithm> header) nad istream_iteratorji, na primer:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream inFile("input.txt");
// error checking !!
istream_iterator<string> ii(inFile);
// default istream_iterator oznacuje konec vnosa
istream_iterator<string> eof;
// preberi 10. besedo:
int wordCount = 0;
while ((wordCount++ < 9) && (ii != eof)) ++ii;
string desetaBeseda = *ii;
// preskoci dve besedi
++ii;
++ii;
string trinajstaBeseda = *(++ii);
cout << desetaBeseda << ", " << trinajstaBeseda << "n";
}
Ce hoces iskati posamezne besede (neucinkivito, ce to pocnes kar v datoteki) uporabis
npr. algoritem std::find (<algorithm> header) nad istream_iteratorji, na primer:
istream_iterator<string> location(inFile);
location = find(ii, eof, "neboticnik");
if (location != eof)
{
// nasli smo "neboticnik"
// ...
}
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Program ki upravklja s programomOddelek: Programiranje | 2224 (1056) | MrBrdo |
» | c++ datotekeOddelek: Programiranje | 4044 (3533) | Vesoljc |
» | problem v c++ kako prebrati matriko?Oddelek: Programiranje | 1399 (1216) | robinzon |
» | Loopy problemOddelek: Programiranje | 1469 (978) | snow |
» | Pac sm butl !!!!!Oddelek: Programiranje | 1380 (1022) | Phil |