2014-10-26 87 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