| 
			
				|  | VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 |  
 
	
		| 上一篇主題 :: 下一篇主題 |  
		| 發表人 | 內容 |  
		| iddqd69 
 
 
 註冊時間: 2004-05-30
 文章: 50
 
 
 第 1 樓
 
 | 
			
				|  發表於: 星期四 十月 21, 2004 8:35 am    文章主題: 如何抓取字串中的某幾個字? |   |  
				| 
 |  
				| 假設有很多規格.. 外徑*厚度*長度
 20*15*1250L   *小王使用*
 15.6*11.05*20L   -阿花使用-
 3*1.25*500L
 26.15*5*516L
 要抓取外徑時我使用VAL(STR(VAL(規格)))
 如果說我要抓取厚度跟長度時該怎麼用呢?
 麻煩請指教..
 謝謝!!
 |  |  
		| 回頂端 |  |  
		|  |  
		| elleryq 
 
  
 註冊時間: 2007-06-21
 文章: 768
 
 
 第 2 樓
 
 | 
			
				|  發表於: 星期四 十月 21, 2004 8:55 am    文章主題: |   |  
				| 
 |  
				| 這應該不難寫~~~ 
 substr() 可以取得字串中的某一段字串...
 再配合迴圈與 state machine 去處理....
 
 大致的 code 長這樣....太久沒用 vfp.....不保證一定正確...請自己 debug 一下並確定你了解我的意思...
 
 
  	  | 代碼: |  	  | local i, ch, len, state
 strValue=""
 len=strlen( your_string )
 state=外徑  && 定義外徑為 0, 厚度為 1, 長度為 2
 for i=1 to len
 ch=substr( your_string, i, 1 )
 if ch <> "*"
 strValue=strValue+ch
 else
 if state==外徑
 外徑=val( strValue )
 else if state==厚度
 厚度=val( strValue )
 else if state==長度
 長度=val( strValue )
 else exit
 state=state+1  && 進入下一個 state
 strValue=""
 endif
 next
 
 | 
 |  |  
		| 回頂端 |  |  
		|  |  
		| BIN 
 
  
 註冊時間: 2004-07-22
 文章: 94
 來自: Tainan, Taiwan
 
 第 3 樓
 
 | 
			
				|  發表於: 星期四 十月 21, 2004 10:13 am    文章主題: |   |  
				| 
 |  
				| 用AT()配合SUBSTR()也可以做到... |  |  
		| 回頂端 |  |  
		|  |  
		| bin1x 
 
 
 註冊時間: 2004-08-27
 文章: 462
 
 
 第 4 樓
 
 | 
			
				|  發表於: 星期四 十月 21, 2004 11:30 am    文章主題: |   |  
				| 
 |  
				| 完整的寫法如下 感覺起來有點笨
 裡面有這支程式的想法完整過程
 USE SPEC
 PRIV nLENGTH
 PRIV nWIDE,nLENG
 DO WHILE NOT EOF()
 nLENGTH = LEN(SPEC.SPEC)
 *SET STEP ON
 nWIDE = WIDE(SPEC.SPEC)
 nLENG = LENG(SPEC.SPEC)
 ? nWIDE,nLENG
 SKIP
 ENDDO
 
 FUNC WIDE
 PARA cFIELD
 *!*	PRIV nLENGTH
 *!*	PRIV lFOUND1,nPOSI1
 *!*	PRIV lFOUND2,nPOSI2
 *!*	PRIV lFOUND3,nPOSI3
 *!*	PRIV I
 *!*	           I = 1
 *!*	           lFOUND1 = .F.
 *!*	           lFOUND2 = .F.
 *!*	           lFOUND3 = .F.
 *!*	           nLENGTH = LEN(cFIELD)
 *找到第一個星號,記取INDEX;回到迴轉開始,從找到的地方繼續
 *!*	           DO WHILE I < nLENGTH
 *!*	                   IF SUBSTR(cFIELD,I,1) = '*'
 *!*	                       lFOUND1 = .T.
 *!*	                       nPOSI1 = I
 *!*	                       I = nPOSI1
 *!*	                       LOOP
 *!*	                   ENDIF
 *!*	                   *找到第二個星號,記取INDEX
 *!*	                   IF SUBSTR(cFIELD,I,1) = '*' AND lFOUND1 AND NOT lFOUND2
 *!*	                       lFOUND2 = .T.
 *!*	                       nPOSI2 = I
 *!*	                       I = nPOSI2
 *!*	                       LOOP
 *!*	                   ENDIF
 *!*	                   *找到第三個星號,記取INDEX
 *!*	                   IF SUBSTR(cFIELD,I,1) = '*' AND lFOUND2 AND NOT lFOUND3
 *!*	                       lFOUND3 = .T.
 *!*	                       nPOSI3 = I
 *!*	                       I = nPOSI3
 *!*	                       LOOP
 *!*	                   ENDIF
 *!*	                   I = I + 1
 *!*	            ENDDO
 
 RETU VAL(SUBSTR(cFIELD,ATC('*',cFIELD,1)+1,ATC('*',cFIELD,2)-ATC('*',cFIELD,1)))
 
 FUNC LENG
 PARA cFIELD
 RETU VAL(SUBSTR(cFIELD,ATC('*',cFIELD,2)+1,ATC('L',cFIELD,1)-ATC('*',cFIELD,2)))
 |  |  
		| 回頂端 |  |  
		|  |  
		|  |  
  
  	| 
 
 | 您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章
 您 無法 在這個版面編輯文章
 您 無法 在這個版面刪除文章
 您 無法 在這個版面進行投票
 您 無法 在這個版面附加檔案
 您 無法 在這個版面下載檔案
 
 |  |