【问题标题】:File handling in C: Strip spaces at the beginning and end of text fileC中的文件处理:去除文本文件开头和结尾的空格
【发布时间】:2014-10-26 23:43:52
【问题描述】:

下面是一个函数,它读取文件 user.dat(附在代码后面)并提取一个字符串和一个分别由“、”和“\n”分隔的 int 值。

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 文本文件,以便我可以删除不需要的空白字符吗?

【问题讨论】:

  • 检查:是令牌""(或NULL)。
  • @BLUEPIXY 使用 if-else 语句或 istoken() 预定义函数?
  • 以你最喜欢的方式
  • 感谢您的帮助。 :)

标签: c formatting file-handling


【解决方案1】:

您可以预处理文件以排除仅包含空白字符的行。例如。在 Perl 中,这将是: perl -ne "print if !/^\s*$/" input.txt > output.txt

【讨论】:

  • 感谢您的建议。但不幸的是,我必须在 C 中完成。
猜你喜欢
  • 2019-04-08
  • 2023-04-09
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多