如何使用c程序删除文本文件中的空格

时间:2011-07-21 05:03:17

标签: c

如何删除文本文件中的空格?在我的同事背后工作的原因是,他有很多文本文件,它们之间有大量的空白区域。通过击退退格,他越来越难以删除它们。所以我计划的是为此编写一个代码。我成功达到了99%。检查我写的下面的代码。

#include<stdio.h>

int main()
{
    int b;
    char array[100];
    gets(array); \\ file name to be given here
    FILE *P;
    FILE *T;
    P=fopen(array,"r");
    T=fopen("./duplicate.txt","w");
    for(;(b=getc(P))!=EOF;)
    {
        if(b==32)
        {
            fputc(b,T);
            me:
            b=getc(P);
            if(b==32)
            goto me;
        }
        fputc(b,T);
    }
}

代码工作完美,但我做的事情,通过创建原始文本文件的副本。但我不想复制,我想重写原始文件本身。我尝试了原始文本文件。但有些地方出错了。

我有算法如何处理它,如保存字符串并将它们写回文件,但我认为这不是有效的方法。而且我有疑问

fputs("\b",filepointer);

这些会创建一个退格我认为不是答案。因为它写的退格字符没有执行退格操作。但我认为有一个函数ungetc()它会在这里工作。任何想法都会得到回报。谢谢你

5 个答案:

答案 0 :(得分:1)

您有严重的安全问题(gets()),设计(goto)和工具选择(这是一个脚本语言的工作,真的)。但要回答您的问题,请将duplicate.txt文件复制到原始文件中。

答案 1 :(得分:1)

虽然我会同意其他海报有更好的选择,然后是C,你有几个安全和设计问题,我将回答你原来的问题。


你不能直接编辑文件,因为你不是简单地改变那里的东西 - 你正在改变长度和结构;因此,在某些时候你复制:内存或第二个文件 malloc()一个与原始文件大小相同的缓冲区(因为最坏的情况是它不能更多,最好的情况要小得多)并将你的字符读入内存。完成后,fopen()原始文件带有“ w ”标记并将所有内容写回来。我通常会建议您复制然后删除重命名,但根据您的其他评论,这似乎不是您愿意接受的解决方案。
警告,但:在您重新打开文件的时间以及将所有内容写回的时间之后,您可能会丢失数据。

答案 2 :(得分:0)

您可以打开文件进行阅读/写作并试一试:

P=fopen(array,"r+");

查看有关fopen的更多信息。

答案 3 :(得分:0)

我知道你想要提高你的C技能,但是如果你安装了ruby,那么你可以在命令提示符下帮助你的同事使用这个单行编写文件:

ruby -p -i -e '$_.squeeze!' file.txt

如果你想创建一个名为file.txt.backup的备份文件,那么:

ruby -p -i.backup -e '$_.squeeze!' file.txt

我认为如果你在最后提供多个文件名,这甚至可以工作,所以你可以得到它的想象力:

ruby -p -i -e '$_.squeeze!' *

ruby -p -i -e '$_.squeeze!' `find -name '*.txt'`

答案 4 :(得分:0)

你诱惑我写它。如果你不想要破坏者,不要看。

https://gist.github.com/1096670