analysera tecken ur en fil

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Broms
    Medlem
    • 2002-09-02
    • 190

    #1

    analysera tecken ur en fil

    Jag skall läsa in en .txt-fil och analysera denna.
    Programmet skall beräkna antal tecken, antal siffror samt antal rader... Antalet tecken pallar den med, men ej siffror samt rader.. var har blitt knas?! *slita håret*

    PHP Code:
    #include <stdio.h>
    #include <stdlib.h> //andvänds för system() och exit()
    #include <string.h> //används för strlen()
    #include <ctype.h>  //används för isdigit()
    
    int main(int argc, char *argv[])
    {
        
        char filnamn[128], text[1000];
        char tkn;
        int n, tecken=0, siffror=0, rader=0;
    
        //deklarerar pekaren minFil av typen FILE
        FILE *minFil ;   
    
        printf("Ange filnamn ");
        
        //läser in filnamnet
        fgets(filnamn, 128,stdin);
    
        //avläser längden på filnamnet
        n = strlen(filnamn);
    
        //byter ut sista tecknet i filnamnet mot \0
        if(n>0)
           filnamn[n-1]='\0';
           
        //kollar om filen verkligen kan öppnas för läsning(r = read)
        if((minFil = fopen(filnamn, "r")) == NULL){
           fputs("\n Kan ej \x94ppna filen.. \n\n\n Programmet avslutas..\n", stderr);
           exit(99);
        }
    
        //läser tecken för tecken fram tills End Of File uppnåtts
        while(tkn = fgetc(minFil) != EOF){
           if (isdigit(tkn)) siffror++; 
           if (tkn == '\n') rader++;
           tecken++;
        }
        
        printf("Filen \"%s\" innehåller f\x94ljande..\n\n",filnamn);
        printf("Antal tecken: %d\n",tecken);
        printf("Antal siffror: %d\n",siffror);
        printf("Antal rader: %d\n",rader);
        printf("\n\nProgrammet avslutas..\n");
     
        //stänger minFile
        fclose(minFil);                         
    
      system("PAUSE");            
      return 0;
    } 
    
  • pimme
    Medlem
    • 2001-09-11
    • 553

    #2
    Att det blir fel beror på att du inte har koll på "precedence"-reglerna (vad det nu heter på svenska).
    Din while-sats borde vara
    [kod]while((tkn = fgetc(minFil)) != EOF){[/kod]
    [citat]Iteration är vackert men rekursion är gudomligt![/citat]

    Comment

    • Broms
      Medlem
      • 2002-09-02
      • 190

      #3
      tackar så mkt pimme

      Comment

      • Phalle
        Medlem
        • 2005-10-11
        • 1

        #4
        Halloj.
        Jag håller på och lär mig lite programmering. Lite frågor angående din kod:

        text[1000] - Vad används den till? Jag kanske har missat det, men jag ser inte var den används i koden.


        //byter ut sista tecknet i filnamnet mot \0
        if(n>0)
        filnamn[n-1]='\0';
        Varför gör man så?

        Tack på förhand.

        /En novis

        Comment

        • PeW
          Medlem
          • 2000-06-20
          • 6839

          #5
          Arrayen text används inte, nej.
          if-satsen är till för att se till att inte skrivning till förbjudet minnesutrymme sker av termineringen av strängen. Skulle annars leda till en krasch av programmet.

          Comment

          Working...