Dealing with whitespaces whilst reading a file

This is a discussion on Dealing with whitespaces whilst reading a file within the C Programming forums, part of the General Programming Boards category; The aim of my code is to read in a code in a text file and discard comments, i.e. any ...

  1. #1
    Registered User
    Join Date
    Dec 2007
    Posts
    67

    Dealing with whitespaces whilst reading a file

    The aim of my code is to read in a code in a text file and discard comments, i.e. any characters after '#'. So for example, line like this:
    Code:
    main: addi  $3,$0,40   # j  = 40
    is transformed into:
    Code:
    main:addi$3,$0,40
    I have written a code that does just that. However, if the line only contains a comment I end up with an array of empty characters. Here is my code:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define LEN 60
    
    void comment_remove (char word[LEN])
    {
        char temp[LEN];
        int i, j;
        for (i = 0; i < LEN; i++){
            if (word[i] != '#'){
                temp[i] = word[i];
            }else{
                temp[i] = '\0';
            }
        }
        i = 0, j = 0;
        
        while (i < LEN){
            if (temp[i] != ' '){
                word[j] = temp[i];
                i++; 
                j++;
            }else{
                i++;
            }
        }
    }
    
    static FILE *open_file (char *file, char *mode) 
    {
        FILE *fptr = fopen (file, mode); 
    
        if (fptr == NULL){			
            perror ("Unable to open file");	
            exit (EXIT_FAILURE);
        }
        return fptr;	
    }
        
    int main (int argc, char *argv[])
    {
        int array_pos = 0;
        char letter, word[LEN];
        FILE *fptr;
        fptr = open_file (argv[1], "r");
        do{
            letter = fgetc (fptr);
            if (letter != '\n'){
                word[array_pos] = letter;
                array_pos++;
            }else{
                word[array_pos] = '\0';
                array_pos = 0;
                comment_remove (word);
                printf ("%s\n", word);
            }
        } while (letter != EOF);
        fclose (fptr);
        return 0;
    }
    So for example, text file like this:
    Code:
                           # register allocation:
                           # 
                           # $3 = j
                           # $4 = a = i - 0
                           # $5 = b = i - 1
                           # $6 = c = i - 2
                           # $7 = t1
                           # $8 = t2
                           # $9 = t3
    
    main: addi  $3,$0,40   # j  = 40
    comes out like this:
    Code:
    
    
    
    
    
    
    
    main:addi$3,$0,40
    My question is how can I deal with the empty arrays in the beginning of the file?

  2. #2
    CSharpener vart's Avatar
    Join Date
    Oct 2006
    Location
    Rishon LeZion, Israel
    Posts
    6,484
    fgetc returns int - so make letter int
    Check for EOF before processing the character


    why not to read file using fgets line by line, and if th efirst char read is # just skip to reading the next line?
    The first 90% of a project takes 90% of the time,
    the last 10% takes the other 90% of the time.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. sequential file program
    By needhelpbad in forum C Programming
    Replies: 80
    Last Post: 06-08-2008, 02:04 PM
  2. Formatting the contents of a text file
    By dagorsul in forum C++ Programming
    Replies: 2
    Last Post: 04-29-2008, 01:36 PM
  3. Possible circular definition with singleton objects
    By techrolla in forum C++ Programming
    Replies: 3
    Last Post: 12-26-2004, 10:46 AM
  4. System
    By drdroid in forum C++ Programming
    Replies: 3
    Last Post: 06-28-2002, 11:12 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21