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

請問如何將一字串拆成二子字串 而不會將中文字拆成兩個亂碼

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
chioucy



註冊時間: 2004-05-26
文章: 33


第 1 樓

發表發表於: 星期三 七月 19, 2006 4:51 pm    文章主題: 請問如何將一字串拆成二子字串 而不會將中文字拆成兩個亂碼 引言回覆

有一字串 vSTR 長度如為 40 內容為中英文混雜 想將其拆為二個子字串
vSTR1=SUBSTR(vSTR,1,20)
vSTR2=SUBSTR(vSTR,21,20)
如果vSTR字串中間剛好為一中文字 則會發生中文字拆成二個半形亂碼

請問要如何避免
回頂端
檢視會員個人資料 發送私人訊息
朱育興



註冊時間: 2003-08-25
文章: 661
來自: 台中市大里區

第 2 樓

發表發表於: 星期三 七月 19, 2006 5:13 pm    文章主題: 引言回覆

這篇供你參考
http://vfp.sunyear.com.tw/viewtopic.php?t=844&highlight=mline

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
syntech



註冊時間: 2003-05-16
文章: 4212
來自: Taipei,Taiwan

第 3 樓

發表發表於: 星期三 七月 19, 2006 6:14 pm    文章主題: 引言回覆

SUBSTRC()
_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
chioucy



註冊時間: 2004-05-26
文章: 33


第 4 樓

發表發表於: 星期三 七月 19, 2006 8:46 pm    文章主題: 引言回覆

謝謝兩位前輩的指導

經過嘗試 我用以下程式段解決了

AAA = "這個是測試字串"

? CUT_2_STR(AAA,1)
? CUT_2_STR(AAA,2)
? CUT_2_STR(AAA,1)+CUT_2_STR(AAA,2)


*==============================================================
* 本函式會將字串盡量平均分成兩個同長度的子字串,且不受中文字影響
*---------------------------------------------------------------------------------------------
* 傳入值: vSTR ==> 要做分割的字串
* vPOS = 1 ==> 取第一個子字串
* vPOS = 2 ==> 取第二個子字串
*==============================================================
FUNCTION CUT_2_STR
PARAMETERS vSTR, vPOS

LOCAL vLEN

vLEN = INT(LEN(vSTR)/2)
vLEN = IIF (BETWEEN(ASC(RIGHTC(SUBSTR(vSTR,1,vLEN),1)),128,255),vLEN+1,vLEN)

RETURN IIF(vPOS=1,SUBSTR(vSTR,1,vLEN),SUBSTR(vSTR,vLEN+1,LEN(vSTR) - vLEN))
回頂端
檢視會員個人資料 發送私人訊息
lcj0831



註冊時間: 2003-02-22
文章: 21


第 5 樓

發表發表於: 星期四 七月 20, 2006 8:43 am    文章主題: 引言回覆

在VFP 6.0 有函數可運用, 不用自己寫了哦!
請參考
?LEFTC('這是測試文字',3)
→這是測
?RIGHTC('這是測試文字',3)
→試文字
回頂端
檢視會員個人資料 發送私人訊息
cchvfp



註冊時間: 2003-07-05
文章: 18


第 6 樓

發表發表於: 星期一 七月 24, 2006 3:55 pm    文章主題: 引言回覆

CC='有一字串STR長度如為40內容為中英文混雜想將其拆為二個子字串vSTR1=SUBSTR(vSTR,1,20)'
SET MEMOWIDTH TO 40
? MEMLINES(CC)
? MLINE(CC,1)
? MLINE(CC,2)
試試吧
回頂端
檢視會員個人資料 發送私人訊息
chioucy



註冊時間: 2004-05-26
文章: 33


第 7 樓

發表發表於: 星期二 七月 25, 2006 11:30 am    文章主題: 引言回覆

謝謝 cchvfp
我是用 VFP6 經測試 結果 ? MLINE(CC,2) 還是會亂掉

? MLINE(CC,1) ==> 有一字串STR長度如為40內容為中英文混雜想
? MLINE(CC,2) ==> N其拆為二個子字串vSTR1=SUBSTR(vSTR,1,20)
回頂端
檢視會員個人資料 發送私人訊息
lelhappy



註冊時間: 2004-06-04
文章: 20


第 8 樓

發表發表於: 星期四 十二月 07, 2006 6:07 pm    文章主題: 引言回覆

cc='有一字串STR長度如為40內容為中英文混雜想將其拆為二個子字串vSTR1=SUBSTR(vSTR,1,20)'

? cut_2_str(cc,40,1)
? cut_2_str(cc,40,2)


FUNC CUT_2_STR
para nStr,nWide,nNum
priv oNum
str該字串 = nStr
n您要的欄寬 = nWide
n要取該字串的開始位址 = 1
oNum=1
do whil n要取該字串的開始位址<=len(str該字串)
if lenc(substr( str該字串 , n要取該字串的開始位址 , n您要的欄寬))=lenc(substr( str該字串 , n要取該字串的開始位址 , n您要的欄寬 -1 ))
str你要取的字串=substr( str該字串 , n要取該字串的開始位址 , n您要的欄寬-1)
n要取該字串的開始位址 = n要取該字串的開始位址+n您要的欄寬-1
else
str你要取的字串=substr( str該字串 , n要取該字串的開始位址 , n您要的欄寬)
n要取該字串的開始位址 = n要取該字串的開始位址+n您要的欄寬
endi
if oNum=nNum
retu(str你要取的字串)
endi
oNum=oNum+1
endd
retu('')

試試看
回頂端
檢視會員個人資料 發送私人訊息
KKKLYNN



註冊時間: 2004-09-17
文章: 357


第 9 樓

發表發表於: 星期五 十二月 08, 2006 11:46 am    文章主題: 引言回覆

陣仗好像弄的太大!
如syntech兄所言
substrc()
就好了
以上您參考
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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