| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4810 人关注过本帖, 1 人收藏
标题:求助如何将非dbf表(.csv文件)有选择的添加到dbf表里
取消只看楼主 加入收藏
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
结帖率:83.33%
收藏(1)
已结贴  问题点数:20 回复次数:10 
求助如何将非dbf表(.csv文件)有选择的添加到dbf表里
由于工作中导出的"分类查询.csv"文件列数经常会有变动,致使导入的数据经常串行,所以想只添加需要的几列到dbf表里。
故求助,如何将"分类查询.csv"中的“我爱编程论坛aa”和“我爱编程论坛cc”两列,添加到"新表.dbf"的“我爱编程aa”和“我爱编程cc”中,忽略.csv文件的其他列,谢谢!
所需"分类查询.csv"列名称是不变的,但列的位置有时会无规律变动。
分类查询.rar (629 Bytes)


[此贴子已经被作者于2018-1-26 11:23编辑过]

搜索更多相关主题的帖子: dbf csv 文件 添加 表里 
2018-01-26 09:17
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
回复 2楼 吹水佬
直接添加的结果是把“分类查询.csv”按1、2、3、4....列的顺序添加到“新表.dbf”里,由于“分类查询.csv”经常会曾减列,导致导入的数据串行,所以想只导入指定列到表里的指定字段,比如附件中的:
"我爱编程论坛aa" 添加到 “新表.dbf” 的 "我爱编程aa" ;
"我爱编程论坛cc" 添加到 “新表.dbf” 的 "我爱编程cc" 。

另:"我爱编程论坛aa" 和 "我爱编程论坛cc" 列数不确定。

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2018-1-26 10:07编辑过]

2018-01-26 09:58
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
回复 4楼 sdta
由于“分类查询.csv”列会变动,导致按吹版导入的tt表里aa和cc字段不一定是我需要数据,
例如“分类查询.csv”第一列插入了"我爱编程论坛00"列,而用吹版的代码,取aa和cc的数据就会变成"我爱编程论坛00"和"我爱编程论坛bb" ,而非"我爱编程论坛aa"和"我爱编程论坛cc"
2018-01-26 10:20
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
“分类查询.csv”列会变动无规律...
2018-01-26 11:04
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
需要的列名称是不变的,但列的位置会变动。

[此贴子已经被作者于2018-1-26 11:18编辑过]

2018-01-26 11:10
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
回复 12楼 sdta
,虽然这样效率慢些,但是个解决办法
2018-01-26 11:29
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
回复 13楼 吹水佬
测试完美通过,多谢吹版主,也谢谢其他人的热心帮助!

[此贴子已经被作者于2018-1-26 12:19编辑过]

2018-01-26 12:02
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
回复 17楼 厨师王德榜
多谢,期待学习。
2018-01-29 09:34
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
@厨师王德榜 学习啦,十分感谢!
2018-01-30 10:44
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
以下是引用吹水佬在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编辑过]

2018-01-30 11:20
快速回复:求助如何将非dbf表(.csv文件)有选择的添加到dbf表里
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019966 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved