亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

用VS.Net編寫擴展存儲過程(三,完)

2024-07-21 02:07:32
字體:
來源:轉載
供稿:網友

昨天忙著寫這個,沒看奧運會,剛知道老郭和小吳又讓外國人郁悶了一把。不知道奧委會是不是又要對跳水改變規則哪?

在上一節,我們把含有兩車站的所有火車id和路線信息分別讀入了int *trainid和char** ppcstations,完成了最后一次讀入數據的過程,下面就要處理這些數據以獲得結果……就要結束了,前途是光明的,道路是平坦的……風是背后吹來的……有mm在身邊陪著的……暈,忘了告訴各位兄弟,小弟現在不吃西紅柿了,改吃雞蛋,請多多關照積極配合,謝謝~~~

第三步,尋找最短的路線

顯然,首先要對路線信息的字符串做分詞處理,知道了從一站到下一站需要多長時間,才可能計算最短路線。本文中將用.net類庫中提供的正則式類來分割這些字符串……當然用普通方法也完全可以處理。

要使用正則式類,就要用到托管代碼,我還是只講應用,不講原理。對托管代碼工作機制感興趣的朋友,請參閱msdn中的托管編程部分。

先選擇xstrainquery項目的屬性,將“配置屬性”下“常規”中的“使用托管擴展”改為“是”,隨后在proc.cpp中加入如下預編譯頭:

#using
#using
using namespace system;
using namespace system::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 = new regex(s"( ?://|(.+?),(.+?)小時)+//|");

    // 定義循環中將用到的變量
    int ioldtime = int_max;
    int nfastest = 0;

    // 萬事俱備,開始處理ppcstations指針數組
    for (int i=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]所代表的路線所需時間
        int inewtime = 0;
        // 定義是否已經找到起點站的bool變量
        bool bstartfound = false;

        // j從0到gstation中捕獲的個數,即總共捕獲到多少個站點
        for (int j=0; jcaptures->count; ++j)
        {
            if ( !bstartfound )
            {
                // 如果尚未找到起點,則判斷當前捕獲站點是否為起點
                if ( gstation->captures->get_item(i)->value->trim()->equals(strstart->trim()) )
                     bstartfound = true;
                // 即使找到了起點,也直接continue,因為起點站對應的時間對運算無意義
                continue;
            }
            else
            {
                 // 已經找到起點站,開始累加路線時間
                 inewtime += int32::parse(gtime->captures->get_item(i)->value->trim());
                 // 看當前捕獲站點是否為終點,若是則退出for循環
                 if ( gstation->captures->get_item(i)->value->trim()->equals(strend->trim()) )
                    break;
            }
        }
        // for循環已退出,比較inewtime和ioldtime,并記錄較小的路線索引
        if ( inewtime < ioldtime )
        {
             ioldtime = inewtime;
             nfastest = i;
        }
    }
    // 現在,nfastest代表了最短路線的索引,ioldtime則代表所需的最短時間
}

終于找到了最短路線和最短時間,工作完成了!運行運行…………期待…………期待…………焦慮…………疑惑…………不對啊,怎么沒有結果?

哦!忘了最后一步,還需要把結果傳出……

第四步,也是最后一步,傳出結果

結果定義為這樣的形式——'車id,需時',生成結果就很簡單了:
{
    // 定義一個255字節的數組,較容易處理
    char pcresult[255];
    sprintf(pcresult, "火車id為%d,需時%d小時", pitrainid[nfastest], ioldtime);
}

怎樣把pcresult送出去?這就用到了srv.h中定義的srv_paramsetoutput方法,其格式如下:

int srv_paramsetoutput (
srv_proc * srvproc,
int n,
byte * pbdata,
ulong cblen,
bool fnull );

其中,n代表是第幾個參數,pbdata代表參數數據,cblen代表參數長度(字節),
若fnull設置為true,則此出參將被強制設為null.

大家肯定注意到,pbdata是一個byte指針,于是我們還要把pcresult轉換為byte*,這個很簡單,直接顯式轉換即可。

設置出參的代碼如下:
{
     // 得到結果的實際長度(字節數)
     int nresultlen = strlen(pcresult);
     // 傳出參數
     srv_paramsetoutput(srvproc, 3, (pbyte)pcresult, nresultlen, false);
 
     // 所有的工作完成后,發出senddone信息
     srv_senddone(psrvproc, (srv_done_count | srv_done_more), 0, 1);
    }

現在工作似乎已經完成了,快拿去運行吧,嘿嘿,多運行幾次……再運行幾次……陶醉一下……又運行幾次……然后……重啟計算機,繼續往下看。

上面的代碼中,我們沒有完全釋放所分配的資源,所以每次運行都會造成內存泄漏。我們必須在代碼的最后加上釋放內存空間的語句,比如ppcstations, pitrainid等。

大功告成,第一個問題得到了解決。

本來還想寫第二個問題的,可第二個問題和第一個問題的區別只在于第三步,即如何計算最短路線的算法上,這個,我相信我現在用的方法一定不是最好的,就不拿出來獻丑了。

原來寫篇文章是這么累的……


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美床上激情在线观看| 国产精品99一区| 欧美一级片一区| 色综合色综合网色综合| 国产精品日韩av| 国产99久久精品一区二区| 欧美肥臀大乳一区二区免费视频| 懂色av一区二区三区| 日韩中文字幕av| 美日韩丰满少妇在线观看| 亚洲高清一二三区| 国产精品日韩一区| 九九九久久国产免费| 日韩欧美国产一区二区| 成人女保姆的销魂服务| 97在线视频国产| 成人激情视频在线| 久久99久久久久久久噜噜| 欧美大肥婆大肥bbbbb| 欧美午夜激情在线| 精品国产区一区二区三区在线观看| 欧美韩国理论所午夜片917电影| 青青在线视频一区二区三区| 久久天天躁狠狠躁夜夜爽蜜月| 91久久精品国产91久久性色| 日韩av三级在线观看| 麻豆一区二区在线观看| 国产精品普通话| 日韩av大片在线| 欧美老妇交乱视频| 精品欧美国产一区二区三区| 欧美激情女人20p| 精品毛片三在线观看| 欧美午夜精品久久久久久人妖| 亚洲国产精品一区二区三区| 91久久精品美女| 欧美中在线观看| 51ⅴ精品国产91久久久久久| 国产精品一区久久久| 亚洲在线第一页| 亚洲精品久久久久久久久| 亚洲成人激情小说| 日韩欧美综合在线视频| 欧美激情免费视频| 欧美日韩综合视频网址| 国产精品第3页| 国内精品中文字幕| 亚洲欧美国产制服动漫| 成人在线一区二区| 久久精品青青大伊人av| 日韩精品日韩在线观看| 91香蕉嫩草神马影院在线观看| 欧美做受高潮1| 亚洲片在线资源| 久久免费视频这里只有精品| 丝袜亚洲另类欧美重口| 91av视频导航| 久热在线中文字幕色999舞| 欧美成人久久久| 精品美女国产在线| 亚洲精品电影网站| 国产精品爽爽爽爽爽爽在线观看| 亚洲国产精品一区二区久| 亚洲欧洲午夜一线一品| 国产视频自拍一区| 亚洲成色999久久网站| 麻豆国产精品va在线观看不卡| 国产精品久久久久久久久久新婚| 成人写真福利网| 中文日韩在线视频| 欧美精品久久久久久久| 亚洲精品福利视频| 亚洲电影免费观看高清完整版| 亚洲va欧美va国产综合久久| 亚洲天堂网站在线观看视频| 91在线免费看网站| 久久久久久国产精品三级玉女聊斋| 97涩涩爰在线观看亚洲| 亚洲成人教育av| 国产成人av在线播放| 成人免费视频xnxx.com| 91九色视频在线| 欧美精品aaa| 91tv亚洲精品香蕉国产一区7ujn| 日韩精品一区二区视频| 国产精品久久久久久久久影视| 久久国产精品久久久久| 久久99久久久久久久噜噜| 久久久久久伊人| 亚洲精品v天堂中文字幕| 色综合久久精品亚洲国产| 国产精品久久久久久av福利软件| 亚洲国产成人在线播放| 亚洲少妇中文在线| 狠狠爱在线视频一区| 狠狠色香婷婷久久亚洲精品| 国产不卡视频在线| 亚洲国产91精品在线观看| 国产精品99久久久久久白浆小说| 亚洲欧美在线x视频| 亚洲精品不卡在线| 国产成人亚洲综合91| 国产综合在线观看视频| 国产91网红主播在线观看| 中文字幕欧美专区| 亚洲无限乱码一二三四麻| 中文字幕日韩欧美在线| 中文欧美在线视频| 96pao国产成视频永久免费| 久久久免费精品视频| 欧美二区乱c黑人| 亚洲欧美视频在线| 成人做爰www免费看视频网站| 97视频在线看| 亚洲大尺度美女在线| 亚洲国产婷婷香蕉久久久久久| 疯狂蹂躏欧美一区二区精品| 日韩欧美国产视频| 久久理论片午夜琪琪电影网| 日韩欧美高清在线视频| 亚洲欧洲国产伦综合| 亚洲精品永久免费| 国产精品96久久久久久| 色噜噜久久综合伊人一本| 国产成人精品久久亚洲高清不卡| 秋霞午夜一区二区| 国产精品aaa| 一区二区三区动漫| 国产精品免费一区二区三区都可以| xvideos成人免费中文版| 在线成人免费网站| 欧美乱人伦中文字幕在线| 亚洲的天堂在线中文字幕| 成人一区二区电影| 亚洲欧美日韩天堂一区二区| 国产精品福利观看| 日本伊人精品一区二区三区介绍| 日韩视频在线一区| 日韩精品丝袜在线| 欧美另类69精品久久久久9999| 中文精品99久久国产香蕉| 国产免费一区二区三区在线观看| 成人黄色大片在线免费观看| 国产美女精品免费电影| 国内精品国产三级国产在线专| 日韩精品在线观看网站| 久久久久国产精品www| 51精品在线观看| 欧美在线免费观看| 欧美一级淫片丝袜脚交| 成人免费视频xnxx.com| 伊人久久精品视频| 久久久视频精品| 欧美亚洲激情视频| 久久久午夜视频| 久久久久国产精品免费网站| 日韩中文字幕国产精品| 亚洲乱码av中文一区二区| 欧美黑人巨大精品一区二区| 精品美女永久免费视频| 18久久久久久| 国产人妖伪娘一区91| 超碰日本道色综合久久综合| 亚洲第一区中文字幕|