请高手帮忙写段代码,成功追加100分!!!

我要处理一个txt文本,要求:删除txt文本中前n个字符相同的行(总共大概要有20000行左右)比如:LINE1000X00,0X01,0X02,0X03,0X04"P0... 我要处理一个txt文本,要求:
删除txt文本中前n个字符相同的行(总共大概要有20000行左右)
比如:
LINE100 0X00,0X01,0X02,0X03,0X04 "P0304" "WOMEN"
.......
LINE1905 0X03,0X01,0X02,0XA5,0X06 "B0206" "NIHAO"
LINE1906 0X00,0X01,0X02,0X03,0X04 "P0304" "DAJIA"

LINE100和LINE1906前面大概十来个字符相同,删除后面的LINE1906行
此外,附带做一个功能,启示字符不是LANDROVER的行,也删掉,这个功能要可选

我觉得这个功能对高手来讲是三下五除二的事情,简单啊
跪请帮忙
通过了追加100分以示感谢

其实我自己做了一个,但有问题,行数少的时候可以解决
但我的文本有一万多行,运行后程序会无法响应,而我不知道原因,已经提问其他人了,没有完全弄明白。

做好请发到这个邮箱,谢了
boxiaoliao@163.com
做成批处理也可以,只要能实现
展开
 我来答
吴刚打鼓打擂头F
2012-07-04 · 超过35用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:112万
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *fp1,*fp2;
int count=0;
char substr[500],substr1[500];
if((fp1=fopen("a.txt","rt"))==NULL)
{
printf("文件a打开失败\n");
exit(0);
}
if((fp2=fopen("tmp_a.txt","wt+"))==NULL)
{
printf("文件tmp_a打开失败\n");
exit(0);
}

while( feof(fp1)==0 )
{
aa:
memset(substr,0,sizeof(substr));
fgets(substr,500,fp1);
rewind(fp2);
count++;
if(count%100==0)
printf("%d\t",count);
while( feof(fp2)==0 )
{
memset(substr1,0,sizeof(substr1));
fgets(substr1,500,fp2);
if( strncmp(substr,substr1,20)==0 )
goto aa;
}
fseek(fp2,0L,SEEK_END);
fputs(substr,fp2);
}

fclose(fp2);
fclose(fp1);
}

转换完以后你也可以把a.txt删掉,把tmp_a改名字为a.txt,
还有
附带做一个功能,启示字符不是LANDROVER的行,也删掉,这个功能要可选

这句没看懂什么意思。
更多追问追答
追问
附带做一个功能,启示字符不是LANDROVER的行,也删掉,这个功能要可选

----------------
附带做一个功能,起始字符不是LANDROVER的行,也删掉,这个功能要可选
也就是说,每一行要以LANDROVER开头,如果不是,这一行也要删除
追答
#include 
#include
#include
int main()
{
FILE *fp1,*fp2;
int count=0;
char substr[500],substr1[500];
char choose;
printf("起始字符不是LANDROVER的行,是否删掉(Y/y/N/n)");
while( scanf("%c",&choose) )
{
if(choose=='Y'||choose=='y'||choose=='N'||choose=='n')
break;
}
if(choose=='Y')
choose='y';

if((fp1=fopen("a.txt","rt"))==NULL)
{
printf("文件a打开失败\n");
exit(0);
}
if((fp2=fopen("tmp_a.txt","wt+"))==NULL)
{
printf("文件tmp_a打开失败\n");
exit(0);
}

while( feof(fp1)==0 )
{
aa:
memset(substr,0,sizeof(substr));
fgets(substr,500,fp1);
count++;
if(count%100==0)
printf("%d\t",count);
if(choose=='y')
{
if(strncmp(substr,"LANDROVER",9)!=0)
continue;
}
rewind(fp2);
while( feof(fp2)==0 )
{
memset(substr1,0,sizeof(substr1));
fgets(substr1,500,fp2);
if( strncmp(substr,substr1,20)==0 )
goto aa;
}
fseek(fp2,0L,SEEK_END);
fputs(substr,fp2);
}

fclose(fp2);
fclose(fp1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rm_2013
2012-07-04 · TA获得超过459个赞
知道小有建树答主
回答量:281
采纳率:100%
帮助的人:188万
展开全部
你的目的是什么?是要处理这个问题,还是要程序?

如果只是处理这个文件,可以把文件和要求发给我,我帮你处理
或者如果你有Linux的话,用shell来处理
比写程序容易得多

2万多行没多少东西,很轻松能处理——只要程序别写的太差
更多追问追答
追问
要程序
我机器上没有装LINUX的
我的工作用不上
追答
没有细看你那个程序,
先提醒你一点吧:不要在栈上分配那么大的数组,栈会溢出的

如果不明白,就是说,你那个大数组,不要用局部变量,改用malloc来分配,
或者弄成全局变量也成

打开两个文件,
不要一次把文件全部内容都读进来,
从原始文件中读一行,处理一行
可以弄个大数组,把处理过的行的前半部分保存下来,
读到一个新行,先去大数组里查找,是否有重复,如果是,就扔掉这行继续;
如果没重复,就把这行写到新文件里,并同时保存到大数组中
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ibangbangcn
2012-07-04 · TA获得超过2654个赞
知道大有可为答主
回答量:3369
采纳率:16%
帮助的人:507万
展开全部
用什么语言实现
追问
最好是C
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式