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

資料格式比對

 
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-16 19:49:27 IP:211.23.xxx.xxx 訂閱
我現在想讓使用者輸入一些資料~
這些資料有一定的格式

如:
NAME:aconxu AGE:22
//NAME: 及 AGE: 是規定的要

當使用者輸入錯了~如
NAMEE //多了一個'E'時就會發出錯誤訊息~

所以我想請問大家~
如何在使用者key資料的同時馬上比對格式正確與否
謝謝~
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-17 01:10:47 IP:218.168.xxx.xxx 訂閱

===================引 用 文 章===================
我現在想讓使用者輸入一些資料~
這些資料有一定的格式

如:
NAME:aconxu AGE:22
//NAME: 及 AGE: 是規定的要

當使用者輸入錯了~如
NAMEE //多了一個'E'時就會發出錯誤訊息~
這我看不懂, 名字可能會輸入中英文頂多判斷不能輸入符號或數字
我會在OnKeyPress這個Event寫判斷式
若不符合就Key=0;
是否發出錯誤訊息看你自己囉


所以我想請問大家~
如何在使用者key資料的同時馬上比對格式正確與否
謝謝~
kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-17 03:23:24 IP:61.229.xxx.xxx 訂閱
在你定義的 TEdit 或 Form .....,只要原件的 Method 支援 OnKeyPress 者,即可用它來 check.

當輸入的字元 Key 不合你的意時,可將 Key 設成 0, 則 editor 上就沒有這個字顯示.

//---------------------------------------------------------------------------
void __fastcall TBasicRequestForm::OnKeyPress(TObject *Sender, char &Key){
if((Key < '0')||(Key > '9')){
if((Key != 0x08)&&(Key != '/')) Key = 0;
}
}

kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-17 03:25:57 IP:61.229.xxx.xxx 訂閱
is ("O n K e y  P r e ss ") method
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-18 18:20:15 IP:211.23.xxx.xxx 訂閱
抱歉~沒說清楚~
就是說 有一些關鍵字 如:NAME AGE ADDRESS ..............

當使用者在KEY這些關鍵字且KEY錯的時候
我能馬上知道使用者KEY錯了

謝謝~


Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-19 02:41:11 IP:211.74.xxx.xxx 訂閱
如果是這樣,那為什麼不把它們全作成Label,
只要限制使用者必填的區塊,這樣也不用擔心他們會Key錯
也只須要檢核資料是否輸入正確就好

如果你還是覺得有必要,那就弄個String,找個不會用到的符號當separator
像這樣CONST_DISC="USERNAME,AGE,PASSWORD"
每次User輸入時,去scan你的keyword作Pos(input, CONST_DISC)>0就好了
未輸入完的一定會在裡面,輸入過長或不在裡面的就會找不到(完)
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-19 09:00:01 IP:211.23.xxx.xxx 訂閱
感謝~COFFEE
可是 ~我連順序都有規定
就是說~
NAME :aconxu AGE:22 ADDRESS:XXXXXXXXXXXXXX
關鍵字有一定的先後順序~一定要先寫NAME再寫AGE
所以~除了判斷是否有輸入錯字之外~
這要怎麼判斷~使用者是否有照這個順序
謝謝~
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-19 09:46:20 IP:220.130.xxx.xxx 訂閱
如果有順序那更好辦,弄個StringList,每次的輸入都檢查是不是在當前索引的字串就好
並限制檢查只會從第一個字串開始,如果不在當前的字串就是違法的
當輸入完keyword時再開放給User輸入其它字元

但與其這樣,還不如乾脆幫User輸入,省的他們也打錯?
或者弄個
Label : Edit
Label : Edit
.
.
.
.
.
這樣,每次只要前面的Edit被清空或未填就自動Focus回前面的欄位就好了不是?
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-19 11:13:49 IP:220.130.xxx.xxx 訂閱
要parse語法的話,請先參考一下我發表的計算機,
用後敘的作法是最簡單的,
當然,你的運算式可能會比想像中的複雜,就應該要考慮建parser tree
這樣的話,我會建議你去翻書比較快,parser tree在Programming Language的書裡面有不少,
原理也是跟Postfix一樣,除了原本的運算子以外,if, &, |也都將變成運算子
建成樹之後,利用對樹的Travel(Travel的過程實際上就是後序,只要針對產生出來的運算子運算元算完往上丟就是了)來完成整個流程
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-19 12:43:06 IP:211.23.xxx.xxx 訂閱
謝謝~Coffee
其實我有個想法~不知道對不對及好不好

IF (a=1) && (b=2)
我用TStringList 可以切出
IF //MyList1->Strings(0)
a=1 //MyList1->Strings(1)
&& //MyList1->Strings(2)
b=2 //MyList1->Strings(3)

TStringList* MyList 1= new TStringList();
先比對"IF"來比對~如果true再比對是否有"&&" or "||"
假設IF 後面又有&& 就表示 MyList 1->Strings(1) MyList 1->Strings(3) 一定都要是EXP

--至於如何判斷EXP
TStringList* MyList 2= new TStringList();
TStringList* MyList 3= new TStringList();
再把MyList 1->Strings(1) MyList1 ->Strings(3)
再切成
a //MyList2->Strings(0)
= //MyList2->Strings(1)
1 //MyList2->Strings(2)

b //MyList3->Strings(0)
= //MyList3->Strings(1)
2 //MyList3->Strings(2)

再比對 MyList 2->Strings(1) 跟 MyList 3->Strings(1) 是否為 " = , != , < ,> ......."

之後再判斷 MyList2->Strings(0)、 MyList2->Strings(2)、MyList3->Strings(0)、MyList3->Strings(2)的內容~

不知道我這樣說~你們看的懂嗎??
會不會很復雜
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-03-19 14:16:01 IP:220.130.xxx.xxx 訂閱
不是不好,只是這樣對於運算子的優先權比較難掌握,
在你的例子裡面,因為你用了人腦Parser(:P),所以你知道要先算兩側再算中央
而且由你提供的例子來看,你的if expression並沒有被括在括號裡面(如果我沒記錯C 應該是要吧?)
我會建議你抄C 的方式,因為這樣你可以確保if後面的括號必須得是 expression,對你處理文字上會比較好作
而且你這樣的想法已經很接近tree的建法了..我會建議你去看一下parser tree
或者先看一下我丟的計算機裡面產生出來的後敘運算式
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-03-19 15:49:12 IP:211.23.xxx.xxx 訂閱

===================引 用 文 章===================
不是不好,只是這樣對於運算子的優先權比較難掌握,
關於這一點~
我的運算子~
我的應該比較像組語
ADD A,B,C //C=A B
SUB A,B,C //C=A-B
IF (A==1) && (B==2)
我並沒有像計算機那樣 A B*C這種運算式出現
這樣應該就沒有"運算子的優先權
"了
在你的例子裡面,因為你用了人腦Parser(:P),所以你知道要先算兩側再算中央
而且由你提供的例子來看,你的if expression並沒有被括在括號裡面(如果我沒記錯C 應該是要吧?)
我會建議你抄C 的方式,因為這樣你可以確保if後面的括號必須得是 expression,對你處理文字上會比較好作
而且你這樣的想法已經很接近tree的建法了..我會建議你去看一下parser tree
或者先看一下我丟的計算機裡面產生出來的後敘運算式

我會Parser Tree 也知道Pirfix 及 Postfix
只是我只會理論
至於要怎麼實作就真的不行了~
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-03-19 16:53:34 IP:220.130.xxx.xxx 訂閱
如果你只用ADD, SUB,那是沒問題的,但問題就在你要引進If,且是有算式的,
如果你像ASM一樣用jez, jnz(不好意思,有點久沒用了,打錯請見諒XD)那當然沒問題
但是if A==2 && B ==1, 在你(人腦)看來就是先處理A, B兩條件,再作&&運算,(實際上這時候&&的運算就已經後於==)
如果條件換成A || B && C跟A || (B && C)那就是兩回事了,前者由左向右算,A, B任一成立與C成立,後者A成立或B與C同時成立
諸然此類的例子很多,除非你可以確保,或者是限制輸入不會有額外的運算優先權問題

我想postfix的轉換與使用,用算的你應該會算,
如何程式化,就要多想一下,我的建議是你的每一個運算,每一步都畫在紙上,比較容易知道程式流程該怎麼 走
比如說如何判斷現在讀進的運算子是否可以直接使用相鄰的運算元(ex 3 4*9, 號不可以直接把4這個值讀進來),
你可以畫畫看,會得到一個結果,就是偷看下一個運算子,再稍微想一下你就會發現這跟轉後序的方法就連起來了..:P
先想如何拆token,然後轉成後序,
token的大原則就是運算子跟運算元是兩回事,你可以先切開來,只要不屬於算運子跟運算元就拋出語法錯誤,
括號也必須成對,部份運算子可以重覆(如括號可以是((3 9)*2) ),先用最直接想得到的方法作
轉後序的動作,你可以先自己畫在紙上,每一步都寫出來,就一定可以轉成程式
再來後序的計算方式,假設a = 3, b = 4, c =9,且算式為a b c,
那麼先轉成a, b, , c, ,//這部份你可以想一下怎麼轉成程式
再來就是將a, b, 算出來,放回去,就會得到7, c, 再將這個算出來就可以了,其實沒有那麼難
parser tree會稍微麻煩一點,因為我不確定你到底要作到什麼程度..比較難給你方向
不過剛隨手翻了一下google,發現這方面其實還有不少人有寫,wiki也有..
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-07-01 20:53:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!