
请高手帮忙写段代码,成功追加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
做成批处理也可以,只要能实现 展开
删除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
做成批处理也可以,只要能实现 展开
展开全部
#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的行,也删掉,这个功能要可选
这句没看懂什么意思。
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的目的是什么?是要处理这个问题,还是要程序?
如果只是处理这个文件,可以把文件和要求发给我,我帮你处理
或者如果你有Linux的话,用shell来处理
比写程序容易得多
2万多行没多少东西,很轻松能处理——只要程序别写的太差
如果只是处理这个文件,可以把文件和要求发给我,我帮你处理
或者如果你有Linux的话,用shell来处理
比写程序容易得多
2万多行没多少东西,很轻松能处理——只要程序别写的太差
更多追问追答
追问
要程序
我机器上没有装LINUX的
我的工作用不上
追答
没有细看你那个程序,
先提醒你一点吧:不要在栈上分配那么大的数组,栈会溢出的
如果不明白,就是说,你那个大数组,不要用局部变量,改用malloc来分配,
或者弄成全局变量也成
打开两个文件,
不要一次把文件全部内容都读进来,
从原始文件中读一行,处理一行
可以弄个大数组,把处理过的行的前半部分保存下来,
读到一个新行,先去大数组里查找,是否有重复,如果是,就扔掉这行继续;
如果没重复,就把这行写到新文件里,并同时保存到大数组中
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用什么语言实现
追问
最好是C
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询