Toon posts:

[C] Tellen aantal chars in een ASCII bestand

Pagina: 1
Acties:

Verwijderd

Topicstarter
Gegroet,

Ik ben bezig met een programma wat een bestand opent, en vervolgens de chars die erin zitten in een array te zetten en die te tellen, zodat ik op basis van het aantal chars een loop kan maken.

Ik was begonnen met iets in de trend van:
C++:
1
2
3
4
file = fopen("bestand.txt", "r");

ARRAY_LENGTH = fgetc(file);
printf("%d", ARRAY_LENGTH);


Alleen daaruit komt "-1"

Ben verder een beetje n00b op 't gebied van files. Kan wel het aantal chars in een string eruit halen maar niet uit bestanden.

Ik heb gezocht op de Search en Google, maar niks gevonden. Zal wel weer eens de verkeerde queries hebben gebruikt :/

Wie kan mij verder helpen?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Staat er wel wat in "bestand.txt"? En is file sowieso een geldige FILE pointer, en niet gewoon NULL?

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

Topicstarter
ja file is gewoon goed gedeclareerd:
FILE *file;

en ja er staat wat in het text bestand, namelijk wat html code. en das toch wat meer dan -1 ;)

oh, en als ik gebruik:
sizeof(fopen("bestand.txt", "r"));

dan krijg ik "2"

Verwijderd

Verwijderd schreef op 19 maart 2004 @ 22:33:
ja file is gewoon goed gedeclareerd:
FILE *file;

en ja er staat wat in het text bestand, namelijk wat html code. en das toch wat meer dan -1 ;)

oh, en als ik gebruik:
sizeof(fopen("bestand.txt", "r"));

dan krijg ik "2"
Je moet kijken of ie niet NULL is....


if (file!=NULL) etc...

Verwijderd

Topicstarter
Verwijderd schreef op 19 maart 2004 @ 22:40:
[...]


Je moet kijken of ie niet NULL is....


if (file!=NULL) etc...
hij's niet null.

Verwijderd

Nou ik neem aan dat je weet wat fgetc doet.....

Verwijderd

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char c;
file = fopen("bestand.txt", "r");

if (file==NULL) 
  {
    /*je eigen error handling*/
 }
  else
  {
     do {
      c = fgetc (file);
     ARRAY_LENGTH ++;  /*ik neem aan dat dit als int is gedeclareerd*/
    } while (c != EOF);
    fclose (file);
    printf("%d", ARRAY_LENGTH);
  }

[ Voor 19% gewijzigd door Verwijderd op 19-03-2004 23:44 . Reden: paar foutjes :P ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

C:
1
2
3
4
5
6
7
8
9
FILE* fp;
unsigned int num_chars;

if ((fp = fopen("bestand.txt", "r")) == NULL) {
   exit(1);
}

fseek(fp, 0, SEEK_END);
num_chars = ftell(fp);

Verwijderd

Topicstarter
Verwijderd schreef op 19 maart 2004 @ 23:31:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char c;
file = fopen("bestand.txt", "r");

if (file==NULL) 
  {
    /*je eigen error handling*/
 }
  else
  {
     do {
      c = fgetc (file);
     ARRAY_LENGTH ++;  /*ik neem aan dat dit als int is gedeclareerd*/
    } while (c != EOF);
    fclose (file);
    printf("%d", ARRAY_LENGTH);
  }
zoals ik het hier zie leest fgetc maar 1 char uit het bestand? als dit zo is dan moet ik mijn C leraar toch eens even aanspreken :(

  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

Verwijderd schreef op 20 maart 2004 @ 00:20:
zoals ik het hier zie leest fgetc maar 1 char uit het bestand? als dit zo is dan moet ik mijn C leraar toch eens even aanspreken :(
Misschien een idee om in het vervolgs eens even na te zoeken wat een functie doet, en wat de functie aan in en uitvoer verwacht ?

Verwijderd

Ben ik nu heel gek als ik zeg dat elke byte van het bestand 1 character is?
Dus als je de bestandsgrootte weet, weet je ook het aantal karakters. Hoe je niets voor te tellen ;)

Verwijderd

Unicode :X ?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
\n <-> CRLF :X ?

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


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 26-05 23:14
In C is een character altijd exact 1 byte, dus in theorie zou euss gelijk hebben, ware het niet dat (zoals MSalters aangeeft) een newline character in tekstmode gecodeerd wordt in twee bytes. Dat is echter alleen een probleem als je het aantal karakters in tekstmode wilt weten (of dat hier het geval is, is mij niet helemaal duidelijk).

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 22-05 14:17
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char c; 
file = fopen("bestand.txt", "r"); 

if (file==NULL)  
  { 
    /*je eigen error handling*/ 
 } 
  else 
  { 
     do { 
      c = fgetc (file);
      if (c != '\n') {
        ARRAY_LENGTH ++;  /*ik neem aan dat dit als int is gedeclareerd*/ 
      }
    } while (c != EOF); 
    fclose (file); 
    printf("%d", ARRAY_LENGTH); 
  }


Zo :??

[ Voor 9% gewijzigd door zeroxcool op 20-03-2004 17:57 ]

zeroxcool.net - curity.eu


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat moet dat in hemelsnaam doen :? Alle chars tellen behalve \n? Wat heb je daaraan?

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

Waarom gebruiken jullie geen stat(2)? :?.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Omdat dat niet ANSI is

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

Topicstarter
.oisyn schreef op 21 maart 2004 @ 22:01:
Wat moet dat in hemelsnaam doen :? Alle chars tellen behalve \n? Wat heb je daaraan?
opdrachtje voor school. (scholen hebben altijd van die nutteloze dingen ;))

[ Voor 12% gewijzigd door Verwijderd op 23-03-2004 00:32 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik had het over de post boven mijn reactie :) Die code klopt namelijk niet

[ Voor 29% gewijzigd door .oisyn op 23-03-2004 00:37 ]

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

Topicstarter
.oisyn schreef op 23 maart 2004 @ 00:37:
Ik had het over de post boven mijn reactie :) Die code klopt namelijk niet
oh sorry :o

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Soultaker schreef op 20 maart 2004 @ 17:26:
In C is een character altijd exact 1 byte, dus in theorie zou euss gelijk hebben, ware het niet dat (zoals MSalters aangeeft) een newline character in tekstmode gecodeerd wordt in twee bytes. Dat is echter alleen een probleem als je het aantal karakters in tekstmode wilt weten (of dat hier het geval is, is mij niet helemaal duidelijk).
Maar dat is een probleem in de opdracht :) Is CR/LF in de input 1 of 2 chars?
Misschien kun je maar beter allebei de methoden gebruiken. Dat maakt de opdracht meteen wat spannender.

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