急盼高人指点,本人感激涕零!!!!

shucun 2003-12-03 02:42:44
大概思路:
前提:用户输入规律的时候每个条件必须以回车结束
一.信息块定义:
1.信息快是从某个文件中按照一定的规律查找到的信息
2.提取信息的规律是客户输入的规律
3.一个信息块可以由若干个字符串或若干个子信息块组成

二.难点
1.需要分析客户输入的规律,从客户输入的规律中找关键字符串,还要找到目标文件的信息。
example:(从目标文件1中查找符合下面规律的信息)
(规律)回车+客户号码1+回车+**********+客户信息(子信息块:回车+客户号码2
回车+**********+客户名称2+回车)+客户名称1+ 回车

(结果)回车+客户号码1+(目标文件中和客户号码1相匹配的字符串后面的字符串,到???????????结束)+回车+**********+客户信息(子信息块:回车+客户号码2++(目标文件中和客户号码2相匹配的字符串后面的字符串,到???????????结束)+回车+**********+客户名称1+(目标文件中和客户名称1相匹配的字符串后面的字符串,到???????????结束)+回车

例如:
用户输入:

纳税人识别号:
##########
纳税人名称:

查询目标文件(目标文件中有若干条记录,是从某个软件的日志中备份出来的文本文件)得到的输出结果应为:

纳税人识别号:4101111111111
##########
纳税人名称:河南软件公司

纳税人识别号:4101111111112
##########
纳税人名称:上海软件公司

纳税人识别号:4101111111113
##########
纳税人名称:深圳软件公司

...........
以下是我涂鸦的几行代码,请高人修改。多谢!!!!


#pragma warning(disable:4786)
#include <string>
# include <iostream>
# include <stdio>
# include <list>
#include <vector>
#include <algorithm>
//用户输入的规律必须每次要输入空格
using namespace std;
void main()
{
typedef vector<string> glVector();//规律数组glVector()用语存放规律
typedef vector<string> xxVector();//信息数组xxVector()用于存放提取出来的信息
typedef glVector::iterator glIT;//当前指针
strIT start,end,it;
start=glVector.begin ();
end=glVector.end ();
string s1;
string *wj=file(wjvector);//行指针*wj指向文件的首行
string *gl=file(glvector());//行指针gl指向用户输入的规律
cout << "Enter a sentence (以空格和回车为结束符号):";//用户输入规律
int i_line = 0;
while(true)
{
if(strstr("glvector", "\r\n"))
i_line++;
else
{
return i_line;
break;
}
} //统计客户输入规律的行数(关键字的个数)
int i_line1 = 0;
while(true)
{
if(strstr("wenjian", "\r\n"))
i_line1++;
else
{
return i_line1;
break;
}
}
const int size = i_line;//盛放规律的数组长度
const int size1 =i_line1;//盛放信息的数组长度
strVector glVector(size);//规律组
string value("aaa");//初始化为aaa
strVector wjVector(size1);//文件组
string value("bbb");//初始化为bbb
for(int i=0;i<i_line;i++)
{
string glline=getline(cin,s1, ' ');
glvector[i]=glline;//把每行的规律作为规律数组的一个元素
*gl++;//每次循环都指向下一行
for(int j=0;j<i_line1;j++)
{
string value("bbb");
string wjline=getline(wenjian,s1, '\n');//回车作为一行的结束符号(必须是一行一种信息)
wjvector[j]=wjline;//把每行的文件作为文件数组的一个元素
strstr("wjvector[j]",glvector[i]);
if(strstr("wjvector[j]",glvector[i])=true)//匹配成功
{
cout<<wjvector[j]<<"\r\n"<<endl;
}
*wj++;
else
{
*wj++;
continue;
}
}
else
cout<<"你的查询条件找不到!请重新输入!"<<endl;
}
for(it=start;it!=end;it++)
*gl=NULL;//释放*gl
*wj=NULL;
return;
}
free std;

...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
0sch 2003-12-12
  • 打赏
  • 举报
回复
你的邮箱是shucun@126.com 吧,
我将程序发向你的邮箱.
希望你结合我的程序和给你的这些指导,好好研究研究程序的结构,主要是VC自己生成的东西,程序是如何执行的,是如何响应消息的,再看一看书.
你是聪明人,应该就此可以入门了.
再见!
0sch 2003-12-12
  • 打赏
  • 举报
回复
我还是把程序贴出来
首先,建立一个库文件,我们将其取名为id.lib,其内容格式如下:
41011111111111
河南公司
0371-8888888
某某某1

41011111111112
上海公司
0371-8888889
某某某3

41011111111113
深圳公司
0371-8888800
某某某3

.
.
.
你也可以根据具体需要,在改编程序时改变库文件格式。
然后,用VC++6.0新建一个基于对话框模板的工程,在其中加入一个EditBox控件,点击右键选取属性。选中它的多行、只读、竖向滚动条选项。
然后增加一个Static Text控件,将内容改为:请输入纳税人ID。
然后再在其后增加一个EditBox控件。
然后在对话框上点击右键,选择ClassWizard,在其中为两个编辑控件分别映射一个CString类型的变量,取名为:m_out,m_id
然后选中第一页,在左边框子中选中IDC_EDIT2控件ID,然后在右边框选中change消息,点击增加函数按钮,然后点击edit按钮,在这个函数中增加代码:
UpdateData();
if(m_id.GetLength()<14)
{
return;
}
else
{
ifstream infile("id.lib");
char * buff=new char[256];
while(!infile.eof())
{
infile.getline(buff,255,'\n');
if(CString(buff)!=m_id)
continue;
else
break;
}
if(infile.eof())
{
AfxMessageBox(_T("没有这个ID,请检查是否输错"),MB_ICONSTOP);
infile.close();
return;
}
else
{
m_out+=_T("纳税人识别号:")+CString(buff);
for(int i=0;i<4;i++)
{
if(!infile.eof())
infile.getline(buff,255,'\n');
if(infile.eof())
{
AfxMessageBox(_T("库文件错误"),MB_ICONSTOP);
infile.close();
return;
}
CString str;
switch(i)
{
case 0:
m_out+=_T("\r\n纳税人名称:");
m_out+=CString(buff);
break;
case 1:
SYSTEMTIME time;
::GetSystemTime(&time);
str.Format("\r\n纳税时间:%d-%d-%d",
time.wYear,
time.wMonth,
time.wDay);
m_out+=str;
m_out+=_T("\r\n电话号码:");
m_out+=CString(buff);
break;
case 2:
m_out+=_T("\r\n法定代表人:");
m_out+=CString(buff);
break;
default:
m_out+=_T("\r\n\r\n");
}
}
}
infile.close();
}

UpdateData(FALSE);
m_ctlOut.SetSel(m_out.GetLength()-1,m_out.GetLength());
然后,再映射WM_CLOSE消息,增加函数,更改如下:
void CMyDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
ofstream outFile("record.txt");
outFile<<m_out;
outFile.close();
CDialog::OnClose();
}


在本程序开始部位,加入
#include "fstream.h"

编译,运行,搞定。
shucun 2003-12-03
  • 打赏
  • 举报
回复
各位大哥,大姐,我在这里等里一整天了。还没有人来!给点面子,帮我看看吧!
shucun 2003-12-03
  • 打赏
  • 举报
回复
虔诚等待各位朋友的到来!感谢大家的关注
请不吝赐教
wangweixing2000 2003-12-03
  • 打赏
  • 举报
回复
GZ
fuxf 2003-12-03
  • 打赏
  • 举报
回复
呆会来
shucun 2003-12-03
  • 打赏
  • 举报
回复
我的邮箱是shucun@126.com

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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