  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		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 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		syntech
 
 
  註冊時間: 2003-05-16 文章: 4252 來自: Taipei,Taiwan
  第 3 樓
  | 
		
			
				 發表於: 星期三 七月 19, 2006 6:14 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				SUBSTRC() _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		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()
 
就好了
 
以上您參考 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |