用VS.Net编写扩展存储过程(三,完)
来源:互联网 发布:linux改文件名命令 编辑:程序博客网 时间:2024/06/06 01:28
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
昨天忙着写这个,没看奥运会,刚知道老郭和小吴又让外国人郁闷了一把。不知道奥委会是不是又要对跳水改变规则哪?
在上一节,我们把含有两车站的所有火车ID和路线信息分别读入了int*TrainID和CHAR**ppcStations,完成了最后一次读入数据的过程,下面就要处理这些数据以获得结果……就要结束了,前途是光明的,道路是平坦的……风是背后吹来的……有MM在身边陪着的……晕,忘了告诉各位兄弟,小弟现在不吃西红柿了,改吃鸡蛋,请多多关照积极配合,谢谢~~~
第三步,寻找最短的路线
显然,首先要对路线信息的字符串做分词处理,知道了从一站到下一站需要多长时间,才可能计算最短路线。本文中将用.Net类库中提供的正则式类来分割这些字符串……当然用普通方法也完全可以处理。
要使用正则式类,就要用到托管代码,我还是只讲应用,不讲原理。对托管代码工作机制感兴趣的朋友,请参阅MSDN中的托管部分。
先选择xsTrainQuery项目的属性,将“配置属性”下“常规”中的“使用托管扩展”改为“是”,随后在proc.cpp中加入如下预编译头:
#using
#using
usingnamespaceSystem;
usingnamespaceSystem::Text::RegularExpressions;
对于char*字符串,必须转化为托展字符串类型,即System::String*指针,才能用正则式类处理。我是用这样的方式把char*转化为System::String*:
System::String*newStr=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes(oldStr));
现在就到了这一步的重头戏——正则式分词。不知道大家有没有掌握.Net的正则式,如果象我一样是菜鸟,还是让MSDN随时待命吧~
{
//把起点和终点站由PBYTE转化为System::String*
System::String*strStart=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes((PCHAR)pbStart));
System::String*strEnd=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes((PCHAR)pbEnd));
//定义正则式模式
//用两个//,是因为|在正则式中有特定含义,必须在|前加上/转义,而//代表了/
Regex*r=newRegex(S"(?://|(.+?),(.+?)小时)+//|");
//定义循环中将用到的变量
intiOldTime=INT_MAX;
intnFastest=0;
//万事俱备,开始处理ppcStations指针数组
for(inti=0;i {
//用r来匹配ppcStations[i]
Match*m=r->Match(ppcStations[i]);
//所有站点的匹配组
System::Text::RegularExpressions::Group*gStation=m->Groups->get_Item(1);
//所有时间的匹配组,与站点匹配组按顺序一一对应
System::Text::RegularExpressions::Group*gTime=m->Groups->get_Item(2);
//定义ppcStations[i]所代表的路线所需时间
intiNewTime=0;
//定义是否已经找到起点站的BOOL变量
BOOLbStartFound=FALSE;
//j从0到gStation中捕获的个数,即总共捕获到多少个站点1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
昨天忙着写这个,没看奥运会,刚知道老郭和小吴又让外国人郁闷了一把。不知道奥委会是不是又要对跳水改变规则哪?
在上一节,我们把含有两车站的所有火车ID和路线信息分别读入了int*TrainID和CHAR**ppcStations,完成了最后一次读入数据的过程,下面就要处理这些数据以获得结果……就要结束了,前途是光明的,道路是平坦的……风是背后吹来的……有MM在身边陪着的……晕,忘了告诉各位兄弟,小弟现在不吃西红柿了,改吃鸡蛋,请多多关照积极配合,谢谢~~~
第三步,寻找最短的路线
显然,首先要对路线信息的字符串做分词处理,知道了从一站到下一站需要多长时间,才可能计算最短路线。本文中将用.Net类库中提供的正则式类来分割这些字符串……当然用普通方法也完全可以处理。
要使用正则式类,就要用到托管代码,我还是只讲应用,不讲原理。对托管代码工作机制感兴趣的朋友,请参阅MSDN中的托管部分。
先选择xsTrainQuery项目的属性,将“配置属性”下“常规”中的“使用托管扩展”改为“是”,随后在proc.cpp中加入如下预编译头:
#using
#using
usingnamespaceSystem;
usingnamespaceSystem::Text::RegularExpressions;
对于char*字符串,必须转化为托展字符串类型,即System::String*指针,才能用正则式类处理。我是用这样的方式把char*转化为System::String*:
System::String*newStr=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes(oldStr));
现在就到了这一步的重头戏——正则式分词。不知道大家有没有掌握.Net的正则式,如果象我一样是菜鸟,还是让MSDN随时待命吧~
{
//把起点和终点站由PBYTE转化为System::String*
System::String*strStart=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes((PCHAR)pbStart));
System::String*strEnd=System::Text::Encoding::Unicode->GetString(System::Text::Encoding::Unicode->GetBytes((PCHAR)pbEnd));
//定义正则式模式
//用两个//,是因为|在正则式中有特定含义,必须在|前加上/转义,而//代表了/
Regex*r=newRegex(S"(?://|(.+?),(.+?)小时)+//|");
//定义循环中将用到的变量
intiOldTime=INT_MAX;
intnFastest=0;
//万事俱备,开始处理ppcStations指针数组
for(inti=0;i
//用r来匹配ppcStations[i]
Match*m=r->Match(ppcStations[i]);
//所有站点的匹配组
System::Text::RegularExpressions::Group*gStation=m->Groups->get_Item(1);
//所有时间的匹配组,与站点匹配组按顺序一一对应
System::Text::RegularExpressions::Group*gTime=m->Groups->get_Item(2);
//定义ppcStations[i]所代表的路线所需时间
intiNewTime=0;
//定义是否已经找到起点站的BOOL变量
BOOLbStartFound=FALSE;
//j从0到gStation中捕获的个数,即总共捕获到多少个站点1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 用VS.Net编写扩展存储过程(三,完)
- 用VS.Net编写扩展存储过程(三,完)
- 用VS.Net编写扩展存储过程(前言)
- 用VS.Net编写扩展存储过程(一)
- 用VS.Net编写扩展存储过程(二)
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 使用VS.NET2003编写存储过程
- 技巧:使用 C# 编写扩展存储过程
- 技巧:使用 C# 编写扩展存储过程
- 编写的SQLServer扩展存储过程
- 编写安全的扩展存储过程
- SQLServer编写存储过程小工具(三)
- 用VS 编写 Python C扩展
- 编写安全的SQL Server扩展存储过程
- 数据汇总加排序
- 网赚关于个人blog加入 Google Adsense广告 注册指南
- SQL查询语句优化的一点
- Project#2--企业各级员工个人应用--Introduction
- 也说sqlserver分页查询
- 用VS.Net编写扩展存储过程(三,完)
- Google Adsense 技巧提示100条
- 如何使用members和Children
- 开题报告基本要求
- 星际2第36批FAQ 不朽者无视核弹
- /Unix下ODBC的安装、配置与
- 偷看原码的6种方法
- 实用SQL:通过向表加clusted索引重整
- 实用SQL:查看表字段信息