如何在我的文本文件中删除空白?这背后的原因,我的同事,他有很多文本文件之间有大量的空白。他越来越难通过按退格键来移除它们。所以我打算写一个代码。我的成功率高达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()会在这里工作。任何想法都会得到回报。谢谢你
虽然我同意其他海报有比C更好的选择,而且你有几个安全和设计问题,我将回答你最初的问题。
你不能直接就地编辑文件,因为你不是简单地改变那里的东西-你改变了长度和结构;因此,在某些时候,将复制到内存或第二个文件。malloc()
是原始文件大小的缓冲区(因为最坏的情况下它不能更多,最好的情况是更小),并将您的字符读入内存。完成后,用"w"标志fopen()
您的原始文件并将所有内容写回来。我通常会建议您复制一份,然后删除-重命名,但根据您的其他评论,这似乎不是您愿意接受的解决方案。
有一个警告,但是:在您重新打开文件并将所有内容写回来的时间内,您可能会丢失数据。
首先要解决安全(gets()
)、设计(goto
)和工具选择(这实际上是脚本语言的工作)等严重问题。但是要回答您的问题,请将duplicate.txt
文件复制到原始文件上。
您可以打开文件进行读写操作并尝试一下:
P=fopen(array,"r+");
查看更多关于fopen的信息
我理解你想提高你的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'`
是你诱使我写的。如果你不想剧透,就不要看。
https://gist.github.com/1096670