C++小程序,高分找高手帮忙写,跪求。
需求如下:a.txt中,有如下数据:AB20C4G0171120131212AB20C4G0172020131213AB20C4G0116120131121AB20C4G...
需求如下:
a.txt中,有如下数据:
AB20C4G01711 20131212
AB20C4G01720 20131213
AB20C4G01161 20131121
AB20C4G01170 20131010
AB20BB100031 20131111
AB20BB100040 20131020
AB20C4G01701 20131101
AB20C4G01710 20131202
AB20C4G01051 20130113
AB20C5G01060 20131010
输入:
AB20C4G01051
AB20C5G0100X
读取输入的数据,对比a文件中的数据,如果相匹配,则,输出该数据所在的行的所有信息,如果不完全匹配,则匹配数据前8位,再次比对。将匹配的数据输出到b.txt
例如上面例子结果应该是:
全匹配:AB20C4G01051 20130113
前8位匹配:AB20C5G01060 20131010
程序要完整哈,也希望有注释,vc2005能运行哈。看了半天的书,还是不知道写,只得求助大家帮忙,谢啦,如有热心大哥完满解决,满分加分奉上。
另外问一句,如果a.txt中这样的数据有上万条,我一次性输入查找有二三十条,这样是不是运行起来会很慢? 展开
a.txt中,有如下数据:
AB20C4G01711 20131212
AB20C4G01720 20131213
AB20C4G01161 20131121
AB20C4G01170 20131010
AB20BB100031 20131111
AB20BB100040 20131020
AB20C4G01701 20131101
AB20C4G01710 20131202
AB20C4G01051 20130113
AB20C5G01060 20131010
输入:
AB20C4G01051
AB20C5G0100X
读取输入的数据,对比a文件中的数据,如果相匹配,则,输出该数据所在的行的所有信息,如果不完全匹配,则匹配数据前8位,再次比对。将匹配的数据输出到b.txt
例如上面例子结果应该是:
全匹配:AB20C4G01051 20130113
前8位匹配:AB20C5G01060 20131010
程序要完整哈,也希望有注释,vc2005能运行哈。看了半天的书,还是不知道写,只得求助大家帮忙,谢啦,如有热心大哥完满解决,满分加分奉上。
另外问一句,如果a.txt中这样的数据有上万条,我一次性输入查找有二三十条,这样是不是运行起来会很慢? 展开
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(const char *text, const char *match, const char *result)
{
char buf[512];
char word[512];
char head[512];
int fullmatch;
FILE *mf, *tf, *rf;
mf=fopen(match,"r");
if (mf==NULL) return;
tf=fopen(text,"r");
if (tf==NULL) return;
rf=fopen(result,"w");
if (rf==NULL) return;
while(1)
{
if (NULL==fgets(buf, 500, mf)) break;
if (1!=sscanf(buf,"%s",word)) continue;
//word就是要匹配的词
fullmatch=0;
fprintf(rf,"\n======== 全8位匹配 %s ==========\n", word);
while(1)
{
if (NULL==fgets(buf, 500, tf)) break;
if (1!=sscanf(buf,"%s", head)) continue;
//head就是当前行的词首
if (strcmp(word, head)==0) //匹配
{
fprintf(rf,"%s",buf);
fullmatch=1;
}
}
rewind(tf);
if (fullmatch==1) continue;
fullmatch=0;
fprintf(rf,"\n======== 前8位匹配 %s ==========\n", word);
while(1)
{
if (NULL==fgets(buf, 500, tf)) break;
if (1!=sscanf(buf,"%s", head)) continue;
//head就是当前行的词首
if (strncmp(word, head, 8)==0) //匹配
{
fprintf(rf,"%s",buf);
}
}
rewind(tf);
}
fclose(tf);
fclose(rf);
fclose(mf);
}
void main(int argn, char *argv[])
{
if (argn<4)
{
printf("用法:match 数据文件名 匹配文件名 结果文件名\n");
return;
}
fun(argv[1],argv[2],argv[3]);
}
/*
数据文件举例:
AB20C4G01711 20131212
AB20C4G01720 20131213
AB20C4G01161 20131121
AB20C4G01170 20131010
AB20BB100031 20131111
AB20BB100040 20131020
AB20C4G01701 20131101
AB20C4G01710 20131202
AB20C4G01051 20130113
AB20C5G01060 20131010
......
匹配文件举例:
AB20C4G01051
AB20C5G0100X
....
结果文件:
======== 全8位匹配 AB20C4G01051 ==========
AB20C4G01051 20130113
======== 全8位匹配 AB20C5G0100X ==========
======== 前8位匹配 AB20C5G0100X ==========
AB20C5G01060 20131010
*/
更多追问追答
追问
请问,指定我的文件位置,语句该改哪里呀?比如读取c\\text.txt
追答
编译了以后执行,假定match.exe是编译后的程序名,在cmd窗口执行之。
用法:match 数据文件名 匹配文件名 结果文件名
在命令行加上三个文件名即可。
如:你指定的数据文件是: c:\text.txt
输出文件是: c:\r.txt
匹配列表文件是: c:\list.txt
那么运行: match c:\text.txt c:\list.txt c:\r.txt
然后打开r.txt, 里面就是你要的结果。
展开全部
我帮你写个吧,上万条数据是很小的数据量哦,20分钟吧,稍等
更多追问追答
追问
跪谢大哥。。
追答
不好意思,迟到了会儿,上班中,刚才有点小事耽误了下
先给一个,你试试,第二个数据会输出不止一个结果到文件中哦,你看看前8个字符。
字数超限...
我hi你吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于练习来说,这程序不算小了
更多追问追答
追问
没办法,bt的老师出的题目,说是根据他以前的上班经验出的实践题。。泪奔。。果然是很复杂呀。。看上去挺简单的,后来我慢慢分析,发现这货还真不容易。。
追答
你慢慢的弄吧,就几个判断+读写文件+搜索 呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怕贴了,楼主不给分那不是白贴,这还是有点难度的
追问
要分还不容易,下次我出分你再帮我改改?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询