 |
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))) |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|