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

在一行的程式指令只取出數字

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



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 1 樓

發表發表於: 星期五 七月 31, 2020 11:07 am    文章主題: 在一行的程式指令只取出數字 引言回覆

? STRTRAN(STRTRAN("4246-3152 8200-4400 400 張大頭" , " " , "") , "-" , "") &&& 替換掉 " " & "-"
顯示 "4246315282004400400張大頭"
後學功力差 想請教各先進 還有哪個函數可以在{一行}的程式內只取出數字的部分 "4246315282004400400" 這是後學要的結果
原字串數字的部分有可能是 15 或 16 或 19 碼 "張大頭" 有可能會在數字的前面 沒給使用者設定輸入的方式 所以 ....

VFP6 謝謝各先進
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
syntech



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

第 2 樓

發表發表於: 星期五 七月 31, 2020 4:16 pm    文章主題: 引言回覆

一次取一個BYTE,
判斷這個BYTE的 ASCII CODE 或是 它是不是一個數字


這就是正常人的想法
你該不會不知道吧

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

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


註冊時間: 2003-01-30
文章: 2157


第 3 樓

發表發表於: 星期五 七月 31, 2020 5:06 pm    文章主題: 引言回覆

VFP 本身並不支援 Regular Expression 正則表達式
你可以用 這個 .fll 檔
http://www.sweetpotatosoftware.com/blog/index.php/2006/01/04/a-regular-expressions-library-for-visual-foxpro/

或沒事來寫寫程式碼
代碼:

? justnumber('aa-1234bb-56cc78-90dd')

FUNCTION justnumber
LPARAMETERS mstring
IF EMPTY(mstring)
   RETURN ''
endif
LOCAL masc, mret
masc=ASC(LEFT(mstring,1))
mret=IIF(masc>=48 AND masc<=57,CHR(masc),'')
RETURN mret+justnumber( SUBSTR(mstring,2))

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 4 樓

發表發表於: 星期六 八月 01, 2020 8:12 am    文章主題: 引言回覆

? TRANSFORM(INT(VAL(CHRTRAN("4246-3152 8200-4400 400 張大頭" , " -" , ""))))
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 5 樓

發表發表於: 星期六 八月 01, 2020 8:17 am    文章主題: 引言回覆

方法二:
A = "4246-3152 8200-4400 400 張大頭"
?CHRTRAN(A, CHRTRAN(A, "0123456789", ""), "")

這種方法的好處在於,不管數字在什麼位置都能取出來。
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 6 樓

發表發表於: 星期六 八月 01, 2020 8:23 am    文章主題: 引言回覆

garfield 寫到:
VFP 本身並不支援 Regular Expression 正則表達式
你可以用 這個 .fll 檔
http://www.sweetpotatosoftware.com/blog/index.php/2006/01/04/a-regular-expressions-library-for-visual-foxpro/


處理這類問題,VFP的自身函數功能是相當強大的,沒必要借助外力。
回頂端
檢視會員個人資料 發送私人訊息
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 7 樓

發表發表於: 星期六 八月 01, 2020 8:38 am    文章主題: 引言回覆

3樓的方法比較新穎,但效率低下(用到了遞歸算法,反覆調用函數),代碼的多少不是重要的,重要的是代碼的運行效率。
回頂端
檢視會員個人資料 發送私人訊息
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 8 樓

發表發表於: 星期一 八月 03, 2020 4:30 pm    文章主題: 引言回覆

感謝各先進的指導
Lygcw9603 先進的這個 真的是可以寫成 {一行}
? CHRTRAN("4246-3152 8200-4400 400 張大頭", CHRTRAN("4246-3152 8200-4400 400 張大頭", "0123456789", "") , "")
"4246-3152 8200-4400 400 張大頭" 是一個欄位 可以直接帶入
太感謝了
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
lygcw9603



註冊時間: 2011-12-25
文章: 126


第 9 樓

發表發表於: 星期二 八月 04, 2020 11:29 am    文章主題: 引言回覆

推薦對面兩個VFP網站
http://www.mzvfp.com/index1.php?m=bbs
https://bbs.bccn.net/forumdisplay.php?fid=22&page=1
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

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


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