如何在.txt檔案中,擷取所需的部份資訊 !? |
答題得分者是:coldwind1234
|
x_i60
一般會員 發表:1 回覆:2 積分:0 註冊:2006-12-01 發送簡訊給我 |
y SolidWorks Corporation,32,308,15,308,15,3H001,1.,2,2HMM,50,0.125,13H06G 1
1029.212518,1E-008,499990.,11HTitan_Chang,,11,0,13H061029.212518; G 2 314,75.2941176470588,75.2941176470588,75.2941176470588,; 1P 1 502,8,25.,0.,-25.,-25.,50.,25.,25.,50.,25.,-25.,0.,25.,-25., 3P 2 50.,-25.,25.,50.,-25.,25.,0.,25.,-25.,0.,-25.; 3P 3 110,25.,0.,25.,25.,0.,-25.; 5P 4 我先讀入一個.txt的文字檔如上.. 在其中我只需要特定的幾列資料為 如: 502開頭 "第二列" 到下一個分號結束的 "第三列" 以及 110開頭的 "第四列",下列為我所需要的資訊.. 502,8,25.,0.,-25.,-25.,50.,25.,25.,50.,25.,-25.,0.,25.,-25., 3P 2 50.,-25.,25.,50.,-25.,25.,0.,25.,-25.,0.,-25.; 3P 3 110,25.,0.,25.,25.,0.,-25.; 5P 4 我之前是用C 來寫擷取字串,現在要改用BCB寫..其中有很多元件都不知道要怎麼用... 所以想要請前輩教我,如果我只單純用一個 button 與一個 memo,來執行擷取 並 顯示我所需要的資訊,要怎麼寫呢!? 之前有爬過文,但沒有找到類似的文章,所以在這想要麻煩前輩可以教教我一下,謝謝,感激不盡 >< 以下是我自己寫的C 程式碼: string s1; string s2="502",s3="110" ; ifstream fin("003.txt"); ofstream fout1("001-1.text"); if(!fin){ cout<<"輸入檔案[001-1.igs]無法開啟"< } if(!fout1){ cout<<"輸出檔案[001-1.txt]無法開啟"< } while(!fin.eof()){ getline(fin,s1); //逐一讀取每一列字串 if(!( s1.find(s2) && s1.find(s3) ) //有找到以 s2,s3 為開頭的字串才記錄。 { cout << s1 << endl; fout1 << s1 << endl; } } fin.close(); fout1.close(); getch(); return 0; |
willishung
一般會員 發表:5 回覆:5 積分:2 註冊:2006-08-01 發送簡訊給我 |
AnsiString s2="502"; AnsiString s3="110" ; TStringList *str=new TStringList(); str->LoadFromFile(".\\003.txt"); for(int i=0;i < str->Count;i ) { if(!(str->Strings[i].Pos(s2) && str->Strings[i].Pos(s3))) Memo1->Lines->Add(str->Strings[i]); } Memo1->Lines->SaveToFile(".\\001-1.text"); |
x_i60
一般會員 發表:1 回覆:2 積分:0 註冊:2006-12-01 發送簡訊給我 |
|
coldwind1234
一般會員 發表:3 回覆:25 積分:20 註冊:2006-08-01 發送簡訊給我 |
猜測你的意思應該是:
先找到 502 或 110 (主Key)後,以分號做為結束位元,所以 主Key 跟 分號之間的所有資料就要全部加上去 memo 內 依照上述所需,寫了以下程式,請測試看看吧 void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString SysPath = ExtractFilePath(Application->ExeName); //取得執行檔路徑 AnsiString fname = SysPath "test.txt"; //取得資料檔檔名 test.txt TStringList *dList = new TStringList(); AnsiString s1 = "502"; //搜尋字串1 AnsiString s2 = "110"; //搜尋字串2 byte FindStep; //搜尋步驟 int FindLine; //記錄找到的行號 dList->LoadFromFile(fname); //取得檔案內容 if (dList->Count>0) { Memo1->Clear(); FindStep = 0; for (int i=0;i { FindLine = 0; //開始找尋符合條件的行號 if (((dList->Strings[i].AnsiPos(s1)>0) || (dList->Strings[i].AnsiPos(s2)>0))&&(FindStep==0)) { //找到後,記錄行號,並加到memo內 FindLine = i; FindStep ; Memo1->Lines->Add(dList->Strings[i]); } //以下為當找到 502 或 110 時,接著要找分號在哪 if (dList->Strings[i].AnsiPos(";")>0) { //找到分號後,判斷是否已經被加到memo內,如沒有,則加進去 if ((FindLine==0)&&(FindStep==1)) { Memo1->Lines->Add(dList->Strings[i]); FindStep = 0; } } } } delete dList; } |
x_i60
一般會員 發表:1 回覆:2 積分:0 註冊:2006-12-01 發送簡訊給我 |
|
CoffeeX
中階會員 發表:18 回覆:121 積分:72 註冊:2005-02-18 發送簡訊給我 |
先懂怎麼看help檔,
快速找到相關的資料,然後閱讀整個架構, TStringList 是一個元件(vcl),只要看到T開頭的都是Borland包裝好的, 以2006而言可在Borland help->w32->procedures->vcl procedures->adding and sorting strings 及Borland help->w32->reference->vcl for win32->classes->Classes->TStringList class 再來就是買一本書,可用於學習基本原件用法, 最後則是上ktop看看高手的作法,
------
=.=??? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |