EXAMPLE:
aa=[abc,"22""Taxi",hello kitty,",","ord"]
?chk_csvfld(aa)
Result:
5
afld[1]=”abc”
afld[2]=”22”Taxi”
afld[3]=”hello kitty”
afld[4]=”,”
afld[5]=”ord”
*green 2010/5/26
FUNCTION chk_csvfld
Lparameters p_str
LOCAL fldnum
*if start is not " then find ,
*if start is " then find ",
*依傳入之字串分解欄位,傳回欄位數
fldnum=0
*Start ....
p_str=ALLTRIM(p_str) &&去除前後空白
is_end=.F.
DO WHILE !is_end
*->由左向右找
* 1 2
*12345678901234567890
*This,is,a,Book
*"This","is","a","book"
fld_end=IIF(LEFT(p_str,1)='"','"','')+"," &&欄位結尾 若第一個字為["],則欄位結尾為[",] 若為空白,則為[,]
endpos=ATC(fld_end,p_str) &&注意,第一個字元不可包含在serach裏,以免重覆找到同一組字元,例如[",",Orz]應得3,但會得1
IF endpos=1 &&若找到第一個,則往下找第2個
endpos=ATC(fld_end,p_str,2)
ENDIF
*
IF endpos=0 &&找不到啦-表示為最後一欄
wfld=SUBSTR(p_str,LEN(fld_end),len(p_str)-len(fld_end)+(2-len(fld_end)))
p_str=''
is_end=.T.
ELSE
wfld=SUBSTR(p_str,LEN(fld_end),endpos-LEN(fld_end))
p_str=SUBSTR(p_str,endpos+LEN(fld_end))
ENDIF
fldnum=fldnum+1
DIMENSION afld[fldnum]
afld[fldnum]=STRTRAN(wfld,[""],["]) &&置換Escape String [""] -> ["]
ENDDO
*
RETURN fldnum
ENDFUNC
*2010/5/26 by Green
PS:
本示範函式可正確轉換約98%的CSV檔
若您需要100%CSV轉檔程式,可洽我的email:greencwi@gmail.com,可轉MSSQL,DBF…等
當然這部分是需要費用的,謝謝您
沒有留言:
張貼留言