Toon posts:

Hoe kan je een txt-file uitlezen in Visual C++

Pagina: 1
Acties:
  • 291 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben opzoek naar een manier om tekst naar een tekstfile weg te schrijven (en uit te lezen) onder visual C++ 6. Ik heb wel al wat informatie gevonden, maar daar kwam ik geen wijs uit, dus ik hoop eigenlijk dat er hier iemand is die het simpel kan uitleggenl.

Verwijderd

Beetje basic dit hoor, kijk of in je msdn cd'tjes bij "using file i/o" voor de win32 manier, of een willekeurig c(++) boek voor de standaard c(++) oplossing..

  • Oviparous
  • Registratie: September 2000
  • Niet online
gewoon een file openen, en dan kun je de tekst die daarin staat gewoon met fread() lezen naar een array of een pointer, en wat daar staat kun je rechtstreeks op je scherm pleuren. Je kunt het ook naar de console schrijven ipv naar een buffer, of direct naar je videogeheugen. (Onee, VC++ waardeert dat niet zo denk ik ;)). TXT file schrijven is hetezelfde: vanaf een bepaalde pointer of uit een array open je een file om te schrijven, en je schrijft die buffer weg met de grootte van de buffer.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

[niet-serieus-modus]
textfiles openen, lezen en schrijven in Visual C++?

Nou, je doet file -> open, en dan selecteer je je bestand (je moet nog wel even het filter op *.txt zetten)

En dan zie je in het scherm wat er in staat, en dan kun je dingen aanpassen, en met file -> save schrijf je m weer weg. Of met file -> save As kun je m onder een andere naam opslaan

om een nieuw tekstbestand aan te maken doe je file -> new

:+
[/niet-serieus-modus]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Oooooooooooooooooh Oisyyyyyyyyyyyyyyyyyyyn!

Help die arme jongen nou gewoon eventjes!

He! Jij altijd met je flauwe grapjes.

Heuw!


(ondertussen geniet ik er stiekum wel van hoor... ;) )

Maareh... als je uit tekstbestanden wil lezen moet je dus even aan de slag met functies als fopen(), fread() en fwrite(). Er zijn nog wat andere manieren om het te doen, maar als je eerst hier eens mee gaat experimenteren, zul je al een heel eind komen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Effe niet letten op de grappenmakers die met fread komen aanzetten. Die hebben C++ niet meer gevolgd sinds 1986. :P
In C++ doe je alle tekst I/O via iostreams. De Input File IOstream heet std::ifstream; de output heet std::ofstream.
Een regel lezen doe je met std::getline().

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

fopen/fread/fwrite/fclose heerst, en ga nu je mond spoelen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:12

The End

!Beginning

Als ie een beginner is en toch met visual c++ 6 werkt kan ie beter de MFC class CFile gebruiken... Lekker makkelijk.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

uhm... je gebruikt 'MFC' en 'makkelijk' in dezelfde zin... dat is niet correct nederlands :)

Maar je kan het beter gewoon de ANSI C++ methode leren dan die van MFC wat alleen met Visual C++ werkt. En dan kun je wel zeggen 'lekker makkelijk', maar wat nou als ie ineens een ander platform voor z'n neus heeft staan? Dan kan ie het ineens niet meer

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:12

The End

!Beginning

Op vrijdag 30 november 2001 15:51 schreef OiSyN het volgende:
uhm... je gebruikt 'MFC' en 'makkelijk' in dezelfde zin... dat is niet correct nederlands :)

Maar je kan het beter gewoon de ANSI C++ methode leren dan die van MFC wat alleen met Visual C++ werkt. En dan kun je wel zeggen 'lekker makkelijk', maar wat nou als ie ineens een ander platform voor z'n neus heeft staan? Dan kan ie het ineens niet meer
Da's wel leuk, maar niet veel programmeurs veranderen elke dag van platform... Dat het generieker is betekent niet dat het beter is. De MFC neemt vooral in het begin heel veel zooi over, zodat je eerst goed in het programmeren kan komen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik zeg niet dat het 'beter' is, ik zeg dat als je het toch aan moet leren je het gelijk goed kunt aanleren door een standaard te kiezen ipv iets wat maar op 1 platform werkt

bovendien is een simpel projectje zonder MFC veel makkelijker op te zetten dan met MFC, dus ik betwijfel zelfs nog hoeveel het makkelijker is

bovendien is portable code ook een stuk makkelijker voor later als je ineens wel van platform wil wisselen. Als jij alles wilt herschrijven moet jij dat weten, maar voor veel mensen is een standaard gebruiken een betere oplossing

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The End
  • Registratie: Maart 2000
  • Laatst online: 07:12

The End

!Beginning

Op vrijdag 30 november 2001 16:02 schreef OiSyN het volgende:
ik zeg niet dat het 'beter' is, ik zeg dat als je het toch aan moet leren je het gelijk goed kunt aanleren door een standaard te kiezen ipv iets wat maar op 1 platform werkt

bovendien is een simpel projectje zonder MFC veel makkelijker op te zetten dan met MFC, dus ik betwijfel zelfs nog hoeveel het makkelijker is
Op zich is het wel een goed idee om de basis van het programmeren eerst te leren alvorens voorgebakken componenten te gebruiken.

Alleen met dat tweede ben ik het niet eens; In visual c++ 6 doe je new project, console app, MFC support en klaar.

Verwijderd

Topicstarter
allemaal bedankt voor je antwoorden het is me al gelukt met behulp van fstream.h :)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op vrijdag 30 november 2001 00:52 schreef OiSyN het volgende:
fopen/fread/fwrite/fclose heerst, en ga nu je mond spoelen :)
En dat voor iemand die meer C++ topics wil zien. Tsk.
:+

Mijn operator<< doet't niet op FILE*s.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op vrijdag 30 november 2001 16:07 schreef The End het volgende:

[..]

Alleen met dat tweede ben ik het niet eens; In visual c++ 6 doe je new project, console app, MFC support en klaar.
Ja, en dan meot je opgeven hoe je MFC gelinkt wil hebben.
Een project zonder MFC gaat gewoon via
new project, console app, no MFC support, en da's alles.

Het belangrijste probleem met MFC is dat het oud is. Template's hadden ze nog niet, dus voor std::vector<T> hebben ze 10 alternatieven (CByteArray en zo) die samen nog minder kunnen. CMyClassArray hebben ze niet.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • BitProcessor
  • Registratie: Februari 2001
  • Laatst online: 11-09 11:52
#include <fstream.h>

ifstream leesvar; //voor input
ofstream schrijfvar; //voor output

leesvar.open("bestandsnaam");
//opgelet : c:\bla.txt wordt c:\\bla.txt
schrijfvar.open("bestandsnaam");
//idem

leesvar>>var; //om lijn 1 van input in var in te lezen, idd, leest PER LIJN
schrijfvar<<var; //inhoud van var naar filetje

of var=leesvar.get(); //teken per teken

op einde je streams sluiten

leesvar.close();
schrijfvar.close();

EOF (end of file) detecteer je pas NA leesoperatie !
en controlleer je met leesvar.eof()

bv if(leesvar.eof()) stopermee ;)

"I think there is a world market for maybe five computers" - Thomas Watson, chairman of IBM, 1943


Verwijderd

nu we toch fijn met z'n allen een MFC vs the universe draad aan het maken zijn, iemand al es naar WTL gekeken?

Verwijderd

#define AANTALCHARS 10240
char leesbuf[AANTALCHARS * sizeof(char)];


#include <fstream.h>
[i]#include <stdio.h></i>

ifstream leesvar; //voor input
FILE *leesvar; // voor input
ofstream schrijfvar; //voor output
FILE *schrijfvar; // voor output

leesvar.open("bestandsnaam");
leesvar = fopen("bestandsnaam", "r");
//opgelet : c:\bla.txt wordt c:\\bla.txt
schrijfvar.open("bestandsnaam");
schrijfvar = fopen("anderebestandsnaam", "w");
//idem

leesvar>>var; //om lijn 1 van input in var in te lezen, idd, leest PER LIJN
schrijfvar<<var; //inhoud van var naar filetje
fread(leesbuf, sizeof(char), AANTALCHARS, leesvar);

of var=leesvar.get(); //teken per teken
bah...

op einde je streams sluiten

leesvar.close();
fclose(leesvar);
schrijfvar.close();
fclose(schrijfvar);

EOF (end of file) detecteer je pas NA leesoperatie !
en controlleer je met leesvar.eof()

bv if(leesvar.eof()) stopermee ;)
if (feof(leesvar)) stopermee ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zaterdag 01 december 2001 13:29 schreef MSalters het volgende:

[..]

En dat voor iemand die meer C++ topics wil zien. Tsk.
:+
dat is omdat c(++) er niet uit ziet als ondertitel
En ik vind het loos om te zeggen dat als je in C++ werkt dat je dan ineens niet meer de oude clib mag gebruiken ofzo
Mijn operator<< doet't niet op FILE*s.
Waarom niet?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Blaat
{
private:
    int i;

public:
    Blaat (int _i) : i (_i) { }

    friend FILE * operator << (FILE * f, const Blaat & b);
};

FILE * operator << (FILE * f, const Blaat & b)
{
    fprintf (f, "Blaat (%d)", b.i);
    return f;
}

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Op vrijdag 30 november 2001 00:40 schreef MSalters het volgende:
Effe niet letten op de grappenmakers die met fread komen aanzetten. Die hebben C++ niet meer gevolgd sinds 1986. :P
In C++ doe je alle tekst I/O via iostreams. De Input File IOstream heet std::ifstream; de output heet std::ofstream.
Een regel lezen doe je met std::getline().
Wat is er mis met newbies de basics aanleren alvorens ze richting streams te sturen ?

Als we dit niet doen krijgen we allemaal van die patsertjes die denken 'C++' te kunnen omdat ze cout's gebruiken :P

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op zaterdag 01 december 2001 15:51 schreef OiSyN het volgende:

[..]

dat is omdat c(++) er niet uit ziet als ondertitel
En ik vind het loos om te zeggen dat als je in C++ werkt dat je dan ineens niet meer de oude clib mag gebruiken ofzo
[..]

Waarom niet?
Is een template. B.v. std::pair : (nee, da's niet van mij)

template< typename First, typename Second >
ostream& operator<< ( ostream& os, pair<First,Second> p )
{
return os << p.first << p.second;
}

En ik mag geen FILE* operator<< (FILE*, std::type )
schrijven. Functies moeten afhangen van tenminste een
van mijn namen (mijn type, of in mijn namespace).
8-)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op zaterdag 01 december 2001 14:43 schreef G8KeePeR het volgende:
#include <fstream.h>
Moet zijn <fstream>.
ifstream leesvar; //voor input
ofstream schrijfvar; //voor output

leesvar.open("bestandsnaam");
//opgelet : c:\bla.txt wordt c:\\bla.txt
schrijfvar.open("bestandsnaam");
//idem
Moet zijn
code:
1
std::fstream leesvar("bestandsnaam");

Dan is de file meteen open. Dichte files heb je niks aan.
Commentaar op \\ klopt wel, maar volgens mij kun je in Win32 progs ook gewoon / gebruiken.
leesvar>>var; //om lijn 1 van input in var in te lezen, idd, leest PER LIJN
Valt dus tegen. Afhankelijk wat var is, leest dit een var object. Als var een string is leest't een woord.
schrijfvar<<var; //inhoud van var naar filetje

of var=leesvar.get(); //teken per teken

op einde je streams sluiten

leesvar.close();
schrijfvar.close();
Dus niet, dat doet je destructor voor je. Is ook veel betrouwbaarder; de dtor runt altijd, hoe je de fstream ook afdankt.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 23:11
Op zondag 02 december 2001 12:21 schreef Codin het volgende:

[..]

Wat is er mis met newbies de basics aanleren alvorens ze richting streams te sturen ?

Als we dit niet doen krijgen we allemaal van die patsertjes die denken 'C++' te kunnen omdat ze cout's gebruiken
:(
Streams ZIJN de basics.
Zie TC++PL:
code:
1
std::cout << "Hello, world" << std::endl;

fopen/fclose mist het essentiele C++ idee, dat dingen die in paren gaan, door een ctor/dtor paar gedaan worden. Dat is waar de hele taal op gebouwd is, met exceptions etcetera. Nu hoef je niet te weten waarom, maar het concept van een dtor die de dingen opruimt, moet je wel kennen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1