線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2689
推到 Plurk!
推到 Facebook!

辨識檔案內容並取特定文字出來

答題得分者是:Stallion
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-14 22:17:15 IP:140.130.xxx.xxx 訂閱
各位大大,小弟有一文字檔(某部分)如下所示,因為我只會抓取固定行的值出來。
但因為feedrate1與feedrate2是"非固定"在第幾行出現,
想請問各位大大該如何去辨識檔案中的feedrate1與feedrate2,
並將他們(feedrate1與feedrate2)一一抓出來在Form上的個別Label上呢??
謝謝!!

Main:**********************
id=0;
feedrate1=500;
feedrate2=500;
step1=0.5;
fextension=0;
bextension=0;

FlSt:**********************
id=2;
feedrate1=600;
fluteod1=6;
fluteod2=6;
feedrate2=600;
red=0.851;
green=0.757;
blue=0.589;

GhMs:**********************
id=3;
red=0.851;
feedrate1=80;
feedrate2=80;
blue=0.589;

GhSt:**********************
id=4;
feedrate1=100;
green=0.757;
feedrate2=100;
blue=0.589;

PfSd:**********************
id=5;
feedrate1=300;
feedrate2=300;
red=0.1;
green=0.5;
blue=0;

------
Neil
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-14 22:42:04 IP:203.204.xxx.xxx 訂閱
沒有實際測試, 僅供參考

<textarea class="delphi" rows="10" cols="60" name="code"> for i:=0 to Memo1.Lines.Count -1 do begin if (Memo1.Lines[i][1]='i') and (Memo1.Lines[i][2]='d') then idvalue:=Memo1.Lines[i][4]; if (Memo1.Lines[i][1]='f') and (Memo1.Lines[i][2]='e') and (Memo1.Lines[i][3]='e') and (Memo1.Lines[i][4]='d') and (Memo1.Lines[i][5]='r') and (Memo1.Lines[i][6]='a') and (Memo1.Lines[i][7]='t') and (Memo1.Lines[i][8]='e') and (Memo1.Lines[i][9]='1') then begin if idvalue='0' then label1.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; if idvalue='1' then label2.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; if idvalue='2' then label3.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; if idvalue='3' then label4.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; if idvalue='4' then label5.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; if idvalue='5' then label6.Caption:= Memo1.Lines[i][10] Memo1.Lines[i][11] Memo1.Lines[i][12] ',' Memo1.Lines[i 1][10] Memo1.Lines[i 1][11] Memo1.Lines[i 1][12]; end; end; </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-14 23:13:36 IP:211.22.xxx.xxx 未訂閱
寫了一個範例,請自行研究修改!
<textarea cols="60" rows="10" class="cpp" name="code"> TMemo *aMemo; int Count; const char *s1 = "feedrate1" , *s2 = "feedrate2"; try { this->Memo1->Clear(); aMemo = new TMemo(this) ; aMemo->Parent = this; aMemo->WordWrap = false; aMemo->Lines->LoadFromFile(".\\testdata.txt"); for ( Count = 0 ; Count < aMemo->Lines->Count - 1 ; Count ) { if ( aMemo->Lines->Strings[Count].Pos(s1) ) this->Memo1->Lines->Add( AnsiString(s1) " found at line " IntToStr(Count) ); if ( aMemo->Lines->Strings[Count].Pos(s2) ) this->Memo1->Lines->Add( AnsiString(s2) " also found at line " IntToStr(Count) ); } } __finally { aMemo->Free(); } </textarea>
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-15 07:10:51 IP:203.204.xxx.xxx 訂閱
請問是否固定會有 ID 0 到 ID 5 ? 因為Label元件是事先要放到Form上的, 幾個 Label 要先知道
feedrate2是否固定會出現在feedrate1後面?
一定要用 Label 顯示值嗎? 可以顯示到 Memo 上嗎? 這些值是另外有計算的用途?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-15 10:11:00 IP:140.130.xxx.xxx 訂閱
1.最少的ID是從0~3,最多是0~13個,所以當有14個ID就會有14個feedrate1與feedrate2。

2.feedrate2一定出現在feedrate1後面。

3.值一定要放在Label上,因為另有計算用途!!

4.因為Label固定放上28個,可否根據Main,FlSt,GhMs,GhSt,PfSd,PfSt來辨識feedrate1與feedrate2要固定放在第幾個Label上呢??

舉例:
a.當有Main,FlSt,FlSt,FlSt,GhMs,GhMs時,ID依序為0.1.2.3.4.5。
其中Main的feedrate1與feedrate2固定放在Label1與Label2,
第一個FlSt的feedrate1與feedrate2固定放在Label3與Label4,
第二個FlSt的feedrate1與feedrate2固定放在Label5與Label6,
第三個FlSt的feedrate1與feedrate2固定放在Label7與Label8,
第一個GhMs的feedrate1與feedrate2固定放在Label9與Label10,
第二個GhMs的feedrate1與feedrate2固定放在Label11與Label12,Label13~Label28不顯示。

b.當有Main,FlSt,GhMs,GhMsGhSt,GhSt,PfSd,PfSdPfSt,PfSt,PfSt,PfSt時,ID依序為0.1.2.3.4.5.6.7.8.9.10.11。
其中Main的feedrate1與feedrate2固定放在Label1與Label2,
FlSt的feedrate1與feedrate2固定放在Label3與Label4,Label5~Label8不顯示
第一個GhMs的feedrate1與feedrate2固定放在Label9與Label10,
第二個GhMs的feedrate1與feedrate2固定放在Label11與Label12,
第一個GhSt的feedrate1與feedrate2固定放在Label13與Label14,
第二個GhSt的feedrate1與feedrate2固定放在Label15與Label16,
只要有Pf開頭的feedrate1與feedrate2就固定從Label17與Label18依序放到Label27與Label28。


謝謝各位大大幫忙!!

===================引 用 pcboy 文 章===================
請問是否固定會有 ID 0 到 ID 5 ? 因為Label元件是事先要放到Form上的, 幾個 Label 要先知道
feedrate2是否固定會出現在feedrate1後面?
一定要用 Label 顯示值嗎? 可以顯示到 Memo 上嗎? 這些值是另外有計算的用途?
------
Neil
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-15 10:37:15 IP:61.220.xxx.xxx 訂閱
如果您可以要求該純文字檔案輸出為.ini格式, 抓值會方便很多, 下面供您參考

<textarea class="delphi" rows="10" cols="60" name="code"> uses IniFiles, Registry; procedure TForm1.Button1Click(Sender: TObject); var MyIniFile: TIniFile; CustomIniFile1 : TCustomIniFile; MemIniFile1 : TMemIniFile; RegistryIniFile1 : TRegistryIniFile; IniFile1 : TIniFile; begin MyIniFile := TIniFile.Create('myapp.ini'); Memo1.Clear; MyIniFile.ReadSectionValues('Transfer', Memo1.Lines); if Memo1.Lines.Values['Title1'] <> 'Picture Painter' then MyIniFile.WriteString('Transfer', 'Title1', 'Picture Painter'); // MyIniFile.ReadSections(ListBox1.Items); // MyIniFile.ReadSection('Ports',Listbox2.Items); // MyIniFile.ReadSectionValues('Ports',ListBox3.Items); MemIniFile1.GetStrings(); MyIniFile.Free; { TCustomIniFile TMemIniFile TRegistryIniFile TIniFile blUseIniFile TCustomIniFile TMemIniFile TRegistryIniFile TIniFile } end; procedure TForm1.Button2Click(Sender: TObject); var MyIniFile: TIniFile; begin MyIniFile := TIniFile.Create('myapp.ini'); { if the entry wasn there before, delete it now } if Memo1.Lines.Values['Title1'] = '' then MyIniFile.DeleteKey('Transfer', 'Title1') { otherwise, restore the old value } else MyIniFile.WriteString('Transfer', 'Title1', Memo1.Lines.Values['Title1']); MyIniFile.Free; end; </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-15 11:06:22 IP:140.130.xxx.xxx 訂閱
因為無法輸出成ini檔案,所以抓不出來,請問大大還有別的方法嗎??


===================引 用 pcboy 文 章===================
如果您可以要求該純文字檔案輸出為.ini格式, 抓值會方便很多, 下面供您參考

<textarea class="delphi" rows="10" cols="60" name="code">uses IniFiles, Registry; procedure TForm1.Button1Click(Sender: TObject); var MyIniFile: TIniFile; CustomIniFile1 : TCustomIniFile; MemIniFile1 : TMemIniFile; RegistryIniFile1 : TRegistryIniFile; IniFile1 : TIniFile; begin MyIniFile := TIniFile.Create('myapp.ini'); Memo1.Clear; MyIniFile.ReadSectionValues('Transfer', Memo1.Lines); if Memo1.Lines.Values['Title1'] <> 'Picture Painter' then MyIniFile.WriteString('Transfer', 'Title1', 'Picture Painter'); // MyIniFile.ReadSections(ListBox1.Items); // MyIniFile.ReadSection('Ports',Listbox2.Items); // MyIniFile.ReadSectionValues('Ports',ListBox3.Items); MemIniFile1.GetStrings(); MyIniFile.Free; { TCustomIniFile TMemIniFile TRegistryIniFile TIniFile blUseIniFile TCustomIniFile TMemIniFile TRegistryIniFile TIniFile } end; procedure TForm1.Button2Click(Sender: TObject); var MyIniFile: TIniFile; begin MyIniFile := TIniFile.Create('myapp.ini'); { if the entry wasn there before, delete it now } if Memo1.Lines.Values['Title1'] = '' then MyIniFile.DeleteKey('Transfer', 'Title1') { otherwise, restore the old value } else MyIniFile.WriteString('Transfer', 'Title1', Memo1.Lines.Values['Title1']); MyIniFile.Free; end; </textarea>
------
Neil
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-15 11:34:41 IP:140.130.xxx.xxx 訂閱
能否單存抓出feedrate1=80裡面的80值出來就好呢??


===================引 用 Stallion 文 章===================
寫了一個範例,請自行研究修改!
<textarea class="cpp" rows="10" cols="60" name="code"> TMemo *aMemo; int Count; const char *s1 = "feedrate1" , *s2 = "feedrate2"; try { this->Memo1->Clear(); aMemo = new TMemo(this) ; aMemo->Parent = this; aMemo->WordWrap = false; aMemo->Lines->LoadFromFile(".\\testdata.txt"); for ( Count = 0 ; Count < aMemo->Lines->Count - 1 ; Count ) { if ( aMemo->Lines->Strings[Count].Pos(s1) ) this->Memo1->Lines->Add( AnsiString(s1) " found at line " IntToStr(Count) ); if ( aMemo->Lines->Strings[Count].Pos(s2) ) this->Memo1->Lines->Add( AnsiString(s2) " also found at line " IntToStr(Count) ); } } __finally { aMemo->Free(); } </textarea>
------
Neil
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-08-15 12:12:44 IP:61.220.xxx.xxx 訂閱

利用 Stallion 提供的搜尋方法, 再類似小弟利用 if 或 switch 把值設定到不同 Label
關鍵告訴您, 苦工自己做, 請自己嘗試改看看吧

------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-08-15 12:23:41 IP:140.130.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> for i:=0 to Memo1.Lines.Count -1 do //for i:=0會出錯??這是為什嗎? Memo1.Lines.Count是否要改成Memo1->Lines->Count呢?? begin if (Memo1.Lines[i][1]='f') and (Memo1.Lines[i][2]='e') and (Memo1.Lines[i][3]='e') and (Memo1.Lines[i][4]='d') and (Memo1.Lines[i][5]='r') and (Memo1.Lines[i][6]='a') and (Memo1.Lines[i][7]='t') and (Memo1.Lines[i][8]='e') and (Memo1.Lines[i][9]='1') then </textarea>
===================引 用 pcboy 文 章===================

利用 Stallion 提供的搜尋方法, 再類似小弟利用 if 或 switch 把值設定到不同 Label
關鍵告訴您, 苦工自己做, 請自己嘗試改看看吧

------
Neil
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-08-15 12:27:14 IP:61.220.xxx.xxx 訂閱
小弟的範例是用 Delphi 語法寫的, 請您自己改成 C Builder 語法
例如 Memo1.Lines.Count 要改成 Memo1->Lines->Count
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
explorer5270
一般會員


發表:3
回覆:16
積分:3
註冊:2007-03-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-08-15 12:31:48 IP:140.130.xxx.xxx 訂閱
教一下小弟
for i:=0 to Memo1.Lines.Count -1 do
begin
如何改成C Builder語法??
謝謝!!

===================引 用 pcboy 文 章===================
小弟的範例是用 Delphi 語法寫的, 請您自己改成 C Builder 語法
例如 Memo1.Lines.Count 要改成 Memo1->Lines->Count
------
Neil
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-08-15 12:48:07 IP:61.220.xxx.xxx 訂閱
1. 在 for 上按下 F1 , 會有說明
2. Stallion 版主的範例有使用 for, 可以參考
3. 建議去買本書, 學會最基本的東西, for 和 if 是很長用的語法, 在Ktop問很基本的語法, 大多數人可能不想理你
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-05-02 18:10:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!