以下是引用吹水佬在2018-1-26 11:28:52的发言:
规则是必需有“我爱编程论坛aa”和“我爱编程论坛cc”
USE 新表
ZAP
cData = FILETOSTR("分类查询.csv")
nFaa = 0
nFcc = 0
nLines = ALINES(arrData, cData)
IF nLines > 0
FOR i=1 TO ALINES(arrFields, arrData[1], ",")
DO CASE
CASE arrFields=="我爱编程论坛aa"
nFaa = i
CASE arrFields=="我爱编程论坛cc"
nFcc = i
ENDCASE
ENDFOR
ENDIF
IF nFaa>0 AND nFcc>0
FOR i=2 TO nLines
nFields = ALINES(arrFields, arrData, ",")
IF nFields>=nFaa AND nFields>=nFcc
INSERT INTO 新表 VALUES (VAL(arrFields[nFaa]), VAL(arrFields[nFcc]))
ENDIF
ENDFOR
ENDIF
BROWSE
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
根据水版的语句,为了更方便的增减使用的字段,我也做了类似 厨师王德榜 老师的字段对比表,有128个字段,因为程序调用字段是不固定的(根据字段表 是否启用 字段来判断),所以不能使用水版的“INSERT INTO 新表 VALUES (VAL(arrFields[nFaa]), VAL(arrFields[nFcc]))”插入,我做的是非常笨拙的循环添加,效率特别低,请问各位老师有更优方案吗?
CLOSE ALL
_bst="分类查询"+LEFT(ALLTRIM(DTOS(DATE())),4)+"-"+LEFT(DTOC(DATE()),2)+"-"+SUBSTR(ALLTRIM(DTOC(DATE())),4,2)+".csv"
_cData = FILETOSTR(_bst)
_nLines = ALINES(arrData, _cData)
ALINES(arrFields, arrData[2], ",")
*-*创建空表并添加字段
_bstfile="数据_"+DTOS(DATE())
CREATE dbf &_bstfile (序号 N(8))
USE 字段库 ALIAS 字段库 IN 0
SELECT 字段库
GOTO TOP
DO WHILE !EOF()
IF LEN(ALLTRIM(程序字段)) > 0 AND 是否启用 = "是"
_fN = 程序字段
_fT = 字段类型
ALTER TABLE &_bstfile ADD &_fN &_fT
ENDIF
SKIP
ENDDO
*-*向空表中添加数据
SELECT &_bstfile
FOR i=2 TO _nLines
&&循环所有来源数据行
APPEND BLANK
&&添加空白记录
REPLACE (FIELD(1)) WITH i-1
&&第一个字段添加序号
ALINES(arrFields, arrData[i], ",")
&&将数据的i行 复制到数组arrFields
FOR _bstList=2 TO FCOUNT()
&&循环字段数减去之前增加的序号字段
_ZD=FIELD(_bstList)
&&将当前字段名复制到变量_ZD
SELECT 字段库
LOCATE FOR 程序字段=_ZD
&&指针指向 字段库 程序字段 = _ZD 的记录
_XH=序号
&&将 字段库 序号复制到变量_XH,用来锁定 程序字段 和 数据来源字段
IF LEFT(字段类型,1)="C"
&&如果是字符型则直接替换,否则转换为数值型后替换
SELECT &_bstfile
REPLACE (FIELD(_bstList)) WITH CHRTRAN(arrFields[_XH],'"','')
ELSE
SELECT &_bstfile
REPLACE (FIELD(_bstList)) WITH VAL(CHRTRAN(arrFields[_XH],'"',''))
ENDIF
ENDFOR
ENDFOR
[此贴子已经被作者于2018-1-30 13:55编辑过]