» »

C++ in datoteke

C++ in datoteke

Srachko ::

Mene pa zanima, kako bi lahko v C++ bral neko datoteko (datoteka naj bi vsebovala izvorno kodo v C++) besedo za besedo. Nekaj stvari sem že poskušal, vendar mi le-to ni uspelo.

Za pomoč se že vnaprej zahvaljujem.
I can see clearly now, the brain has gone...

OwcA ::

Recimo std::cin.getline() v navezi s std::string::split().
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Gundolf ::

Uporabiš standardni knjižnici fstream in string. Odpreš file in ga bereš z std::getline. Getline vzame tudi parameter, s katerim lahko določiš znak pri katerem se branje ustavi (default je new-line, lahko mu daš npr presledek). Na žalost na ta način ne boš uspel zaznati tab-ov in novih vrstic, kaj šele oklepajev in podobnega. To lahko narediš tako da dobljene tokene še nadalje razdeliš. Ali pa uporabiš neko drugo funkcijo, kot je omenil Owca.

64202 ::

std::string::split()?

Gundolf ::

Jaz prvič slišim za split in mislim da ga ni v razredu std::string. Po moje si boš moral kar sam spisati en tokenizer.

OwcA ::

Uf, pa res.

... v tej temi širim same napačne informacije. :8)

No, da se malo potolažim, vsaj ideja je bila dobra. :)
Otroška radovednost - gonilo napredka.

Srachko ::

Poskušal sem že takole:

// ...
char Znak;
ifstream VhodnaDatoteka("vhod.cpp");
while (VhodnaDatoteka != EOF)
{
VhodnaDatoteka.get(Znak);
VhodnaDatoteka.close();
// ...

V polje znakov sem dodajal vsak prebran znak, razen, če je le ta bil presledek ali pa znak za novo vrstico. Zadeva se mi je še nekako obnesla, vendar pa to še zmeraj to ni to, kar sem hotel. Iz vhodne datoteke bi rad pridobil seznam vseh funkcij. Pri tem moram upoštevati, da lahko vsaka funkcija preko imena vrača vrednosti različnih podatkovnih tipov (na žalost tudi tistih, ki jih je sestavil uporabnik - struct, enum, ...). Potem bi pa še rad, da bi program vhodno datoteko prepisal v izhodno tekstovno datoteko tako, ena funkcija zapolni N vrstic. Še zmeraj si razbijam glavo, kako bi to lahko uresničil.
I can see clearly now, the brain has gone...

Gundolf ::

Za to tvojo nalogo bi pa rabil že skoraj celoten C++ parser.

Za začetek si morda lahko pomagaš tako, da uporabiš svoje znanje o tem kako izgleda C++ova funkcija:

ReturnType FunctionName(Param1Type Param1, Param2Type Param2, ...) {

Pri tem ti ni treba vedeti vseh možnih tipov ReturnTypa, razen tega da je to ponavadi ena sama beseda. Še ena beseda, za katero je par ( ) z nekaj besedami vmes, ti že pomeni, da si najverjetneje našel funkcijo. Če je za ) je še { pa si lahko 100%, da je to res definicija neke funkcije in lahko vse skupaj nekam izpišeš.

V primeru da želiš bolj natančne stvari (zgornji pirmer ne deluje vedno!) boš, kot sem že omenil, rabil pravi C++ parser - to je pa zelo daleč od lepega ali enostavnega kosa kode.


Vredno ogleda ...

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

[C++] vprašanja (strani: 1 2 3 4 5 6 7 8 9 )

Oddelek: Programiranje
44727331 (11877) aljazko1995
»

Program ne deluje več (strani: 1 2 )

Oddelek: Programiranje
506573 (5311) Genetic
»

[C++] Unicode, Utf...

Oddelek: Programiranje
61500 (1383) Matako
»

[C++] branje nizov

Oddelek: Programiranje
181765 (1342) MasterBlaster
»

[C++] tekst in vrstice

Oddelek: Programiranje
5904 (850) buba švabe

Več podobnih tem