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

想請問 如何在記事本中 取出我所需要的字串呢?

答題得分者是:jow
b9015055
一般會員


發表:4
回覆:2
積分:1
註冊:2007-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-30 15:56:19 IP:61.230.xxx.xxx 訂閱
問題:
例如:記事本中 有以下的資訊:
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-30 20:14:59 IP:123.193.xxx.xxx 訂閱
參考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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-30 21:31:29 IP:61.230.xxx.xxx 訂閱
先感謝jow的回覆.......

我自己剛剛用比較笨的方式寫出來了 @@

我的方法是先將檔案讀入後 先存於一個AnsiString的temp內

然後利用 text.Pos(head) text.Delete(1,start-1) text.Pos("|") text.SubString(1,g-1) 這四個函式去做處理 然後再丟回原來的記事本內儲存了 。

------
Yap~~~
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-30 21:32:11 IP:123.193.xxx.xxx 訂閱
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< Result->Text = StringReplace(S, Delimiter, '\n', 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; iCount; i )
if(L->Strings[i].Trim()!="")
Form1->ListBox1->Items->Add(L->Strings[i].Trim());
}
__finally{
delete L;
}
return true;
}
}
return false;
}
//---------------------------------------------------------------------------
[/code]
系統時間:2024-05-02 11:11:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!