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

如何抓取字串中的某幾個字?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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)))
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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