Toon posts:

[C] Karakter voor karakter uit file lezen *

Pagina: 1
Acties:
  • 59 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben nog niet zo lang bezig met c-programmeren, maar ik vroeg me het volgende af:

Is het ook mogelijk om uit een file alles karakter voor karakter binnen te halen en dit in een array te zetten (dus elk element een karakter)?

ik kon het zo op iternet niet vinden en krijg het niet voor elkaar met het fread statement..

kan iemand mij daarmee helpen?

Verwijderd

Waarom niet een hele regel in lezen met CFile, deze heeft een ReadLine methode. Na het inlezen krijg je een CString terug, hiervan kun je de karakters uitlezen met de GetAt methode.

Verwijderd

Topicstarter
omdat de file bestaat uit alleen maar karakters (geen spaties of enters dus) en die moeten geplaatst worden in een 2-dimensionale array (x,y) vandaar leek dit me de makkelijkste oplossing, mits mogelijk..

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Of je nu karaketer voor karakter uit een file lees, of regel voor regel en dan karakter voor karakter uit de regel haalt maakt toch niet uit lijkt me :)

Overigens zal je eerste dimensie overeenkomen met een regel uit dat bestand lijkt me

[ Voor 23% gewijzigd door Creepy op 02-12-2004 11:51 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
en dat is juist dus niet het geval... de eerste dimensie is dus groter als een regel uit het bestand...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op donderdag 02 december 2004 @ 12:01:
en dat is juist dus niet het geval... de eerste dimensie is dus groter als een regel uit het bestand...
En je probleem om 1 regel in te lezen en dat karakter voor karakter te verwerken is?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 07:25
Hmm ik snap het probleem niet helemaal denk ik. Wat is precies je 2e dimensie, als er geen enters ofzo in de file staan?
Naja... om je in ieder geval een beetje op weg te helpen. Char's stuk voor stuk inlezen doe je (in c) volgens mij ongeveer zo:

code:
1
2
3
4
5
6
7
8
9
char array[256];
int i = 0;
ifstream infile;
infile.open("data.dat");
while(!infile.eof())
{
    array[i] = infile.get();
    i++;
}


Maar dan met wat meer checks enzo. Als ik het mij goed herinner in ieder geval

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-04 07:04
Het kan met fgetc. Maar bedenk wel dat het per karakter uitlezen van een bestand een enorme performance hit met zich meebrengt. Per regel uitlezen en dan per karakter verwerken zoals hierboven genoemd wordt is veel sneller.

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 14-05 10:51
int fgetc(FILE *stream);

Ik snap niet waarom het je met fread niet lukt, ga daar eerst eens goed naar kijken. Om per karakter in te lezen en te checken of je niet aan het einde van de file bent is veel trager en omslachtiger dan het gebruiken van fread, maar je moet het zelf maar weten ;-)

@TimD:
CFile en CString zijn geen C functies. Het zijn C++ classes uit de MFC library...

@Coca-Cola:
Dat is geen C, maar C++

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


  • Virgil
  • Registratie: November 2001
  • Laatst online: 17-05 20:10

Virgil

We're not alone

Mja, idd. Als je nou alle strings gewoon in een chararray zet, heb je al automatisch alle karakters in een (eendimensionaal) array.

Ik was heel, heeeel vroeger SeRRveR


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Als jij een tweedimensionaal array maakt is dat een blok geheugen achter elkaar. Je moet alleen wel zorgen dat de dimensies overeenstemmen met het formaat van je bestand.

(Dus op een eenzelfde wijze geschreven naar dat bestand dmv v/e array met dezelfde dimensies en type.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MaTriCX
  • Registratie: Augustus 2002
  • Laatst online: 18-07-2024
Dit is ongeveer wat je nodig hebt, je moet alleen nog even de karakters in de 2-dimensionale array zetten. Begrijp alleen niet waarom je 2 dimensies nodig hebt als je geen herkenbare seperatoren hebt ( zoals Enter oid ).

code:
1
2
3
4
5
6
7
8
9
10
11
char c;
FILE *fp_in;

fp_in = fopen( 'bestand.txt', "r" );
if( fp_in == NULL ) {
   // Geen geldig bestand
}

while( (c = fgetc(fp_in)) != EOF ) {
/* hier de c in de array gooien */
}

Verwijderd

Opvallend dat velen de vraag weer niet begrijpen.
"Waarom lees je het niet regel voor regel in?"

Waar staat dat hij uberhaupt regels heeft in dat bestand? :?
Verderop zegt de TS dat zijn file alleen maar uit karakters bestaat, en spaties/enters e.d. dus niet voorkomen.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Verwijderd schreef op donderdag 02 december 2004 @ 14:27:
Opvallend dat velen de vraag weer niet begrijpen.
Misschien komt dat omdat de vraag niet goed geformuleerd is?

Er zijn nogal wat onduidelijkheden namelijk:

Er staan alleen karakters in zijn file geen regeleinden. Wat is dan de separator? Of is er geen separator? Waarom dan een array met 2 dimensies? Is de file en /of het array een vaste grootte ?

Kijk, dom voordoen hoe je een enkel karakter uitleest uit een bestand kan maar misschien is het ook wel aardig om een betere methode te bedenken voor zijn achterliggende probleem.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op donderdag 02 december 2004 @ 14:27:
Opvallend dat velen de vraag weer niet begrijpen.
"Waarom lees je het niet regel voor regel in?"

Waar staat dat hij uberhaupt regels heeft in dat bestand? :?
Verderop zegt de TS dat zijn file alleen maar uit karakters bestaat, en spaties/enters e.d. dus niet voorkomen.
Een spatie of een enter is net zo goed een karakter (ook al komen ze bij de TS niet voor) niet voor ;)

Daarnaast is karakter voor karakter lezen traag. Lees dan een x aantal karakters in en ga ze daarna 1 voor 1 verwerken.

Het is ook nog mogelijk dat de TS een een binair bestand heeft dat ie in het geheugen wilt laden. Ook dan is karakter voor karakter lezen traag.

Het inlezen van een file is echter vrij basic te noemen. Echt moeilijk is het niet. Daarnaast zijn er nu ook wel genoeg opzetjes gegeven om het probleem van de TS op te lossen.

Dus daarom zet ik dit topic dicht.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.