2014-10-26 84 views
0

以下是讀取文件user.dat(附加在代碼後面)並提取由「,」分隔的字符串和int值的函數,以及「\ n」。文件處理C:文本文件開頭和結尾的條空間

void getUsers() 
{ 
    int i, t; 
    char *token1, *u; 
    FILE *fu = fopen("user.dat", "r"); 
    const char s[2] = ", "; 
    if(fu != NULL) 
    { 
     char line1[20]; 
     while(fgets(line1, sizeof line1, fu) != NULL) 
     { 
      token1 = strtok(line1, s); 
      for(i=0;i<2;i++) 
      { 
       if(i==0) 
       { 
        u = token1; 
        token1 = strtok(NULL,s); 
       } else { 
        t=atoi(token1); 
       }  
      } 
      addOuterNode(u,t); 
     } 
     printOuterNode(); 
     fclose(fu); 
    } else { 
     perror("user.dat"); 
    } 
} 

User.dat文件如下:如果上述格式被維持

1000, 76 
0095, 81 
2910, 178 
0001, 1 
<EOF> 

程序工作正常。

但是,當存在雜散空格或換行符時,我遇到了問題(SIGSEGV通常作爲* u和t值發送到函數,將函數插入到鏈表/嵌套鏈表的節點中的void *數據元素中)在文件中。例如:

<newline> 
1000, 76 
<space> 
0095, 81 
2910, 178 
0001, 1 
<space><newline> 
<newline> 
<EOF> 

你能幫助我預處理user.dat文本文件,以便我可以刪除不需要的空白字符嗎?

+0

檢查:標記爲「」「(或NULL)。 – BLUEPIXY 2014-10-26 23:49:43

+0

@BLUEPIXY使用if-else語句或istoken()預定義函數? – 2014-10-26 23:54:43

+0

用你最喜歡的方式 – BLUEPIXY 2014-10-27 00:10:44

回答

0

您可以預處理文件以排除僅包含空白字符的行。例如。在Perl中,這將是: perl -ne「print if!/^\ s * $ /」input.txt> output.txt

+0

謝謝你的建議。但不幸的是,我不得不在C中做到這一點。 – 2014-10-27 00:31:01