想請問 如何在記事本中 取出我所需要的字串呢? |
答題得分者是:jow
|
b9015055
一般會員 發表:4 回覆:2 積分:1 註冊:2007-09-28 發送簡訊給我 |
問題:
例如:記事本中 有以下的資訊: 123456789abcdefgh good:thing:天氣| 123456789abcdefgh 123456789abcdefgh 123456789abcdefgh good:num:九 | 123456789abcdefgh 123456789abcdefgh good:cat:貓| 123456789abcdefgh 123456789abcdefgh 123456789abcdefgh good:dog:狗| ......................後面還很長 類推..... 需求: 我想將有good:XXX:OOO| 這樣的字串 抓取出來 其他資訊都是不要的 然後將其丟入一個新檔案內 請問各位前輩 有什麼函式可以用的嗎? 試了很久 都只能抓取到第一筆的 然後就不會往下抓了 @@ 先幫解答的人說謝謝哩~~~ 主要是想請問 怎麼抓取我要的字串呢? 連續的往下抓下去這樣... ps:123456789abcdefgh 這一串不一定是這樣的字串 只是代替我不要的字元而已 XXX為 thing 或 num 或 cat 或 ... etc OOO為中文部份
------
Yap~~~ |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
參考timhuang大大這篇修改的.
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=30409 [code delphi] unit Unit1; interface uses Windows, Classes, Messages, Forms, StdCtrls, Controls, SysUtils; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; function EnumChildProc(h: hwnd; a: integer): Boolean; stdcall; implementation {$R *.dfm} function _split_(S, Delimiter: string): TStringList; begin Result := TStringList.Create; Result.Text := StringReplace(S,Delimiter,#13,[rfReplaceAll,rfIgnoreCase]); end; procedure TForm1.Button1Click(Sender: TObject); var h: HWND; begin h := FindWindow(nil, PChar('TEST - 記事本')); if h <> 0 then begin EnumChildWindows(h, @EnumChildProc, 0); end; end; function EnumChildProc(h: hwnd; a: integer): Boolean; var I: Integer; L: TStringList; Buff: Array[0..1023] of Char; begin Result := False; if h <> 0 then begin GetClassName(h, Buff, SizeOf(Buff)); if Uppercase(Trim(Buff)) = 'EDIT' then begin SendMessage(h, WM_GETTEXT, SizeOf(Buff), Integer(@Buff[0])); L := _split_(Trim(Buff), '123456789abcdefgh'); try for I := 0 to L.Count-1 do if Trim(L[I]) <> '' then Form1.ListBox1.Items.Add(Trim(L[I])); finally FreeAndNil(L); end; Result := True; end; end; end; end. [/code]
編輯記錄
jow 重新編輯於 2007-09-30 20:19:48, 註解 無‧
|
b9015055
一般會員 發表:4 回覆:2 積分:1 註冊:2007-09-28 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
C版本
[code cpp] #define fMainH //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp><br />//--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND h, int a); TStringList* __fastcall _split_(AnsiString S, AnsiString Delimiter); class TForm1 : public TForm { __published: TListBox *ListBox1; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: public: __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif [/code] [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "fMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HWND h; h = FindWindow(NULL, "TEST - 記事本"); if(h!=0) EnumChildWindows(h,(WNDENUMPROC)EnumChildProc, 0); } //--------------------------------------------------------------------------- TStringList* __fastcall _split_(AnsiString S, AnsiString Delimiter) { TStringList *Result = new TStringList; TReplaceFlags Flags; Flags< return Result; } //--------------------------------------------------------------------------- BOOL CALLBACK EnumChildProc(HWND h, int a) { char Buff[1024]; if(h!=0){ GetClassName(h, &Buff[0], sizeof(Buff)); if(AnsiString(Buff).Trim().UpperCase()=="EDIT"){ SendMessage(h, WM_GETTEXT, sizeof(Buff),(int)&Buff[0]); TStringList *L = _split_(Trim(AnsiString(Buff)), "123456789abcdefgh"); try{ for(int i=0; i if(L->Strings[i].Trim()!="") Form1->ListBox1->Items->Add(L->Strings[i].Trim()); } __finally{ delete L; } return true; } } return false; } //--------------------------------------------------------------------------- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |