全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1248
推到 Plurk!
推到 Facebook!

進階一問:文字檔資料,插入、比對

答題得分者是:RaynorPao
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-05 23:43:07 IP:210.68.xxx.xxx 未訂閱
各位先進大家好:    小弟上回問了一個“文字檔中每N筆資料換一行“,得到大家的幫忙已經解決了再次謝謝各位    現在小弟想再做進一步的處理,如下: 一、假設1.txt中的資料是abcd,2.txt中的資料是efgh,如何將這兩個檔案合併成3.txt,其內容為abcdefgh(如果想要存成1.txt或2.txt這樣也可以嗎?)    二、假設4.txt中的資料為1234567,5.txt中的資料為0124456789,想將比對正確的結果存成6.txt(格式為:2-6,第個字元開始,共個字元正確),即一個字元對一個字元比對!這樣的概念該如何進行呢? 小弟知道這樣子還會有很多問題發生,但我目前只想到這個方法,各位先進如果有對於比對資料上的建議,還煩請幫幫忙! 十二萬分感謝 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 > 發表人 -
------
JUST DO IT
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-06 00:11:27 IP:61.221.xxx.xxx 未訂閱
引言: 各位先進大家好: 小弟上回問了一個“文字檔中每N筆資料換一行“,得到大家的幫忙已經解決了再次謝謝各位 現在小弟想再做進一步的處理,如下: 一、假設1.txt中的資料是abcd,2.txt中的資料是efgh,如何將這兩個檔案合併成3.txt,其內容為abcdefgh(如果想要存成1.txt或2.txt這樣也可以嗎?) 二、假設4.txt中的資料為1234567[,5.txt中的資料為0124456789,想將比對正確的結果存成6.txt(格式為:2-6,第二個字元開始,共六個字元正確),即一個字元對一個字元比對!這樣的概念該如何進行呢? 小弟知道這樣子還會有很多問題發生,但我目前只想到這個方法,各位先進如果有對於比對資料上的建議,還煩請幫幫忙! 十二萬分感謝 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 > < face="Verdana, Arial, Helvetica"> clarkkent 你好: 請參考以下的範例程式碼 < class="code"> (1) TStringList *sl1=new TStringList; TStringList *sl2=new TStringList; TStringList *sl3=new TStringList; sl1->LoadFromFile("1.txt"); sl2->LoadFromFile("2.txt"); // 假設 1.txt 及 2.txt 兩個檔案的行數一樣 for(int i=0; iCount; i ) { sl3->Add(sl1->Strings[i] sl2->Strings[i]); Application->ProcessMessages(); } sl3->SaveToFile("3.txt"); delete sl3; delete sl2; delete sl1; (2) TStringList *sl4=new TStringList; TStringList *sl5=new TStringList; TStringList *sl6=new TStringList; sl4->LoadFromFile("4.txt"); sl5->LoadFromFile("5.txt"); // 假設 4.txt 及 5.txt 兩個檔案的行數一樣 for(int j=0; jCount; j ) { int k=sl5->Strings[j].Pos(sl4->Strings[j]); if(k>0) { sl6->Add(IntToStr(k) "-" IntToStr(sl4->Strings[j].Length())); } else { sl6->Add("0"); } Application->ProcessMessages(); } sl6->SaveToFile("6.txt"); delete sl6; delete sl5; delete sl4; -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/08/06 09:29:29
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-06 00:28:28 IP:210.68.xxx.xxx 未訂閱
感謝RaynorPao兄的回應:    真不愧是On Line Help!    對不起,沒說清楚,我是想將每段分割出的資料,各存成一個檔(還在想怎麼做) 因此小弟的資料內容(每個txt檔)都是連續無空格的!    不知您所謂的“行數“是指? 造成您的困擾,真是抱歉!    再次謝謝您    新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 Just do it
------
JUST DO IT
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-06 00:39:36 IP:61.221.xxx.xxx 未訂閱
引言: 感謝RaynorPao兄的回應: 真不愧是On Line Help! 對不起,沒說清楚,我是想將每段分割出的資料,各存成一個檔(還在想怎麼做) 因此小弟的資料內容(每個txt檔)都是連續無空格的! 不知您所謂的“行數“是指? 造成您的困擾,真是抱歉! 再次謝謝您 新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 Just do it
clarkkent 你好:
(1)所謂的行數一樣,是指我已經假設你的檔案格式像以下這個樣子
   檔案 1.txt 的檔案內容
   aaaaa
   bbbb
   ccccddd
   檔案 2.txt 的檔案內容
   1111xxx
   2222dd
   3333kkk
   也就是說,這兩個檔案每一行只有一個字串,而兩個檔案都剛好有 N 行
(2)你如果想要直接套用我上一篇文章提供的範例程式碼的話,應該只需要把你
   要做處理的檔案格式調整成像 (1) 中那個樣子就可以達到你的目的了
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/08/06 00:41:15
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-06 00:47:58 IP:210.68.xxx.xxx 未訂閱
RaynorPao大: 您真是太厲害了!    小弟想請教您,如果我的每個資料檔(.txt)為連續無空格(檔案有可能很長,一百萬個字以上,有影響嗎?除了速度),這樣子就沒有行數的問題嘍(皆等於一),小弟會去試試的,感謝您讓小弟長知識 順心 如意 早安 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 >
------
JUST DO IT
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-06 08:38:50 IP:210.68.xxx.xxx 未訂閱
RaynorPao版大及各位先進您好: 小弟試了一下您的程式,發現小弟沒有說明清楚,不好意思!    發文時,沒用標示的很好 以下是小弟之前的問題:    二、假設4.txt中的資料為1234567,5.txt中的資料為0124456789,想將比對正確的結果存成6.txt(格式為:2-6,第二個字元開始,共六個字元正確),即一個字元對一個字元比對!這樣的概念該如何進行呢? 在5.txt中的資料有兩個4,而4.txt中正確資料應該為3 所以比對的結果應該是:比對了七個連續字元,共有六個一樣,其字元開始位置為二! 亦即以4.txt內容的長度進行比對(這裡是七,有可能上千),比對的資料為5.txt(約一百萬個字元以上),其結果為6.txt 感謝各位先進的指教 新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 Just do it
------
JUST DO IT
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-06 09:26:35 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao版大及各位先進您好: 小弟試了一下您的程式,發現小弟沒有說明清楚,不好意思! 發文時,沒用標示的很好 以下是小弟之前的問題: 二、假設4.txt中的資料為1234567,5.txt中的資料為0124456789,想將比對正確的結果存成6.txt(格式為:2-6,第二個字元開始,共六個字元正確),即一個字元對一個字元比對!這樣的概念該如何進行呢? 在5.txt中的資料有兩個4,而4.txt中正確資料應該為3 所以比對的結果應該是:比對了七個連續字元,共有六個一樣,其字元開始位置為二! 亦即以4.txt內容的長度進行比對(這裡是七,有可能上千),比對的資料為5.txt(約一百萬個字元以上),其結果為6.txt 感謝各位先進的指教 新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 Just do it
clarkkent 你好: 如果你的字串長度會非常長的話,也許使用 TMemoryStream 會比較保險,以下 是範例程式碼 (這兩個範例程式碼都已經事先假設每一個檔案都只有一行字 串,而此字串很長很長) < class="code"> (1) TMemoryStream *ms1=new TMemoryStream; TMemoryStream *ms2=new TMemoryStream; TMemoryStream *ms3=new TMemoryStream; ms1->LoadFromFile("1.txt"); ms2->LoadFromFile("2.txt"); ms3->CopyFrom(ms1, ms1->Size); ms3->CopyFrom(ms2, ms2->Size); ms3->SaveToFile("3.txt"); delete ms3; delete ms2; delete ms1; (2) TMemoryStream *ms4=new TMemoryStream; TMemoryStream *ms5=new TMemoryStream; TMemoryStream *ms6=new TMemoryStream; ms4->LoadFromFile("4.txt"); ms5->LoadFromFile("5.txt"); BYTE *b4; BYTE *b5; int iStart=0; int iCount=0; for(int i=0; iSize; i ) { b4=(BYTE*)ms4->Memory; b5=(BYTE*)ms5->Memory i; if(*b4==*b5) { iStart=i 1; break; } Application->ProcessMessages(); } if(iStart!=0) { for(int j=0; jSize; j ) { b4=(BYTE*)ms4->Memory j; b5=(BYTE*)ms5->Memory j iStart-1; if(*b4==*b5) { iCount ; } Application->ProcessMessages(); } } AnsiString sz=IntToStr(iStart) "-" IntToStr(iCount); ms6->Size=sz.Length(); ms6->Write(&sz[1], ms6->Size); ms6->SaveToFile("6.txt"); delete ms6; delete ms5; delete ms4; -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-06 12:41:27 IP:211.74.xxx.xxx 未訂閱
RaynorPao版大您好: 謝謝您的幫忙,小弟的程式已有初步的功能了!    在此想請教您,根據小弟的想法,比對的內容是不是一定要第一個字元一定要一樣才行? 例如: 字元位置:  123456789                   SOURCE TXT:123 TARGET TXT:023103 這樣子的結果為 0-0 可否根據SOURCE TXT的內容長度做一評估值,如上面的例子,使其結果為1-3-2及4-3-2,表示當來源位置於第一個或第四個字元時,且來源有3個字元,跟目標做比對後有2個字元是一樣的(一樣指的是內容、及位置都一樣,當然有可能會有多個重覆的!),當然若目標檔中有123則就不顯示上面的兩種情形嘍!(取最佳的) ps.由於我的資料內容會很長,所以應該重覆的會不少吧! 好像問太多了,我該另發起一個問題來問嗎? 除了謝謝,還是謝謝您 <>新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 >
------
JUST DO IT
系統時間:2024-06-28 19:41:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!