VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

讓直式信封中的中文地址站起來

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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有很多函數沒人提起我還沒注意到它的存在呢 ^^
_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作