|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 1 樓
|
發表於: 星期二 十一月 11, 2003 11:29 am 文章主題: 讓直式信封中的中文地址站起來 |
|
|
一般在處理中文字時如果要讓它由橫式變成直立式,除了利用字型的方式來改變以外, 並沒有人對於同時有英數字時該如何處理有漂亮的處理方式, 現在你參考以下的做法, 希望你們還覺得滿意.
原字串: 大里市德芳南路385號
輸出結果:
大
里
市
德
芳
南
路
385
號
* 如果有這個程式用於 label 裡, 你不須要轉字型, 只要將放地址的物件寬度設成4個英文字,高度設20行, 印出來的字就是站了起來囉.^^
程式碼:
******************************************
func splitcword &&--將一個一個的中文字切斷, 如有英數字則不會切掉, 可用於直印中文地址
Lpara mstr
* splitword('台中縣大里市德芳南路385號' ) ==> 中文字, 一個字一個字的切, 數字不會切.
* Garfield
If empty( mstr ) &&--測試用字串
mstr = '台中縣大里市德芳南路385號'
Endif
mstr = trim( mstr )
local mret, mnword
mret = ''
mnword = .f.
For i=1 to len(mstr)
If ASC(subs( mstr , i, 1))>=128
if mnword
mret =mret + chr(13)+chr(10)
endif
mret = mret + subs( mstr, i,2)+chr(13)+chr(10)
i=i+1
mnword = .F.
else
mret = mret + subs( mstr, i,1)
mnword = .T.
endif
Next
Return mret _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
Ruey
註冊時間: 2003-03-12 文章: 1698 來自: tunglo
第 2 樓
|
發表於: 星期三 五月 12, 2004 12:12 am 文章主題: |
|
|
數字最好也轉換一下
這樣就比較完美拉!!
代碼: | FUNC get_Num2Chinese(tc_Value)
LOCAL i,lc_Value
DIMENSION daList[10] &&
daList[1]="一"
daList[2]="二"
daList[3]="三"
daList[4]="四"
daList[5]="五"
daList[6]="六"
daList[7]="七"
daList[8]="八"
daList[9]="九"
lc_Value=""
tc_Value=ALLTRIM(tc_Value)
FOR i=1 TO LEN(tc_Value)
IF INLIST(SUBSTR(tc_Value,i,1),"1","2","3","4","5","6","7","8","9","0")
IF SUBSTR(tc_Value,i,1)=="0"
lc_Value=lc_Value+"○"
ELSE
lc_Value=lc_Value+daList(VAL( SUBSTR(tc_Value,i,1) ))
ENDIF
ELSE
lc_Value=lc_Value+SUBSTR(tc_Value,i,1)
ENDIF
NEXT
RETURN lc_Value
ENDFUNC |
_________________ #############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!
學會VFP使用者社區的搜尋,Code才會更有趣~
############################# |
|
回頂端 |
|
|
freedom
註冊時間: 2004-05-09 文章: 11
第 3 樓
|
發表於: 星期四 五月 13, 2004 1:29 am 文章主題: |
|
|
好东东,好想法。
另有一个函数介绍:
ISLEADBYTE( ) 可以判定字符是否是双字节字符。如果字符的第一个字节是前导字节,那么字符是双字节字符,否则字符是单字节字符。
另有别的算法推荐:
clea
a1="20A中3国51"
a2="○一二三四五六七八九"
a22="0123456789"
a23=chr(13)+chr(10)
a3=""
for i=1 to len(a1)
if ISLEADBYTE(substr(a1,i,1))
a3=a3+substr(a1,i,2)+a23
i=i+1
else
b1=substr(a1,i,1)
b2=at(b1,a22)
if b2#0
a3=a3+substr(a2,b2*2-1,2)+a23
else
a3=a3+b1+a23
endif
endif
endfor
? a1
? ""
? a3 _________________ 版权所有,翻版不究! |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2157
第 4 樓
|
發表於: 星期四 五月 13, 2004 6:28 am 文章主題: |
|
|
Good , 這行 If ASC(subs( mstr , i, 1))>=128 乃是老掉牙的CLIPPER語法延用至今的語法, VFP有很多函數沒人提起我還沒注意到它的存在呢 ^^ _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|