50分求代码删除某一行

liuzu2016 2012-06-12 05:31:27
hello
world
xyz


这3行在txt 中,然后现在写代码删除,c没有提供啊

提供个代码吧


...全文
252 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIYUNKEBEYOND 2012-09-07
  • 打赏
  • 举报
回复
用我的方法吧,已经通过实验验证!!!
1、 if((fp=fopen("test.txt","w+"))==NULL) //用W+模式打开文档!!!
2、 用ftell(fp)、fseek(fp, offset, SEEK_CUR); //来定位要写入的位置!!!
3、 用fwrite(buf1, strlen(buf1), 1, fp); //在W+模式下fwrite会覆盖原来的数据!!!

IVERS0N 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
代码没有错误,是对的

知识点理解有错误



windows空行不能用strlen ==1来比较

比如:
a

b

这样肯定错误的

char buf[50];

int count=0;
while(fgets(buf,50,file))
{
if( buf[0]!='\n')
count++;
}

fclose(file);

这才是……
[/Quote]
我疏忽了 假如最后一行是a strlen == 1 就起不了作用了
KING_314 2012-06-13
  • 打赏
  • 举报
回复
全部读取出来 按行进行判断 当遇到需要删除的那行不写入
只是很想懂 2012-06-13
  • 打赏
  • 举报
回复
若是 做一个BackSpace 功能(回删,一个字符一个字符的删除。)该注意哪些呢 ?[Quote=引用 2 楼 的回复:]

懒得写

说个思路吧

fopen + fread,读出文件
然后换行符是\n (linux)
要删第X行,就把第X-1到第X个换行符之间的内容删掉
最后fwrite写回

记得读写文件的特点,注意打开的方式,完毕
[/Quote]
liuzu2016 2012-06-12
  • 打赏
  • 举报
回复




代码没有错误,是对的

知识点理解有错误



windows空行不能用strlen ==1来比较

比如:
a

b

这样肯定错误的

char buf[50];

int count=0;
while(fgets(buf,50,file))
{
if( buf[0]!='\n')
count++;
}

fclose(file);

这才是对的

谢谢各位了



[Quote=引用 10 楼 的回复:]

fgets 空行怎么处理

拿楼上 的例子来说

a.txt 中有空行, 删掉a.txt 中的某一非空行

然后把剩下的东西全部放到b.txt中

fgets 遇到空行就傻了


while( !eof(fr) )
{
count++
if( fread(buffer,1000, fr)
{
//然后把
if(count==delte_c……
[/Quote]
IVERS0N 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

ls

你的意思是说 ,
函数fread, fgets遇到空行不会返回 NULL???

所以我那个法子必然出错,因为我认为fread,fget函数遇到空行会返回NULLL
[/Quote]
空行也是有数据的 换行回车符
liuzu2016 2012-06-12
  • 打赏
  • 举报
回复
ls

你的意思是说 ,
函数fread, fgets遇到空行不会返回 NULL???

所以我那个法子必然出错,因为我认为fread,fget函数遇到空行会返回NULLL

IVERS0N 2012-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

fgets 空行怎么处理

拿楼上 的例子来说

a.txt 中有空行, 删掉a.txt 中的某一非空行

然后把剩下的东西全部放到b.txt中

fgets 遇到空行就傻了


while( !eof(fr) )
{
count++
if( fread(buffer,1000, fr)
{
//然后把
if(count==delte_c……
[/Quote]

if(strlen(buffer) == 1) //空行就一个字符 跳过去
continue;
liuzu2016 2012-06-12
  • 打赏
  • 举报
回复
fgets 空行怎么处理

拿楼上 的例子来说

a.txt 中有空行, 删掉a.txt 中的某一非空行

然后把剩下的东西全部放到b.txt中

fgets 遇到空行就傻了


while( !eof(fr) )
{
count++
if( fread(buffer,1000, fr)
{
//然后把
if(count==delte_count)
{
memeset(,,);
continue;
}
else
{
fpust(fw,bufffer,1000);
mmeset(,,);
}

}

sevancheng 2012-06-12
  • 打赏
  • 举报
回复
直接覆盖 或者替换不就完了么
赵4老师 2012-06-12
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。
IVERS0N 2012-06-12
  • 打赏
  • 举报
回复


int delete_num = 0 , count = 0;
printf("输入删除行数:");
scanf("%d",&delete_num);
char buffer[100] = {0};
FILE *fp_r = fopen("test.txt","r");
FILE *fp_w = fopen("result.txt","w");
if(!fp_r || !fp_w)
{
printf("open error");
return 0;
}
while(fgets(buffer,100,fp_r))
{
count++;
if(count == delete_num)
{
memset(buffer,0,100);
continue;
}
fputs(buffer,fp_w);
memset(buffer,0,100);
}
fclose(fp_r);
fclose(fp_w);
return 0;


yangkai7758 2012-06-12
  • 打赏
  • 举报
回复
有一整个库函数在做这个事呢…………

这玩意和OS相关,不同平台的库当然不一样,但是也都是C/C++实现的啊
忘世麒麟 2012-06-12
  • 打赏
  • 举报
回复
最简单的方法,将这三行存入txt之后,在删除程序部分将文件的打开方式设置为"W"因为:
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
然后文件里面的内容就没有了.方式还有其他的,自己试一试.
liuzu2016 2012-06-12
  • 打赏
  • 举报
回复
楼上,跟没说一样

x-1到x个

fread能读取到空行吗??

fscanf貌似也读取不到啊


如果删空行,你怎么搞?


还有我的问题是:

sdgdgesgs fdsd dsf dsf ss dfsdfs
sdgsdg
hello
sgw9898shgwghewhgweh


把hello干掉

定义很大的缓冲区,

然后去读取,能fread遇到空格就傻,后面的读入不了


liuzu2016 2012-06-12
  • 打赏
  • 举报
回复
存到string中,然后查询到 csdn

然后erase

但是 貌似c++/c无法做到把整个文本文件的内容,包括空行 都读取到的功能吧

yangkai7758 2012-06-12
  • 打赏
  • 举报
回复
懒得写

说个思路吧

fopen + fread,读出文件
然后换行符是\n (linux)
要删第X行,就把第X-1到第X个换行符之间的内容删掉
最后fwrite写回

记得读写文件的特点,注意打开的方式,完毕
liuzu2016 2012-06-12
  • 打赏
  • 举报
回复
这个没有函数提供,难道c有缺陷不成

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧