Foxtable(狐表)用户栏目专家坐堂 → [求助]如何批量导入csv文件


  共有6148人关注过本帖树形打印复制链接

主题:[求助]如何批量导入csv文件

帅哥哟,离线,有人找我吗?
青岛hhh
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:76 积分:804 威望:0 精华:0 注册:2015/2/13 9:06:00
[求助]如何批量导入csv文件  发帖心情 Post By:2015/2/16 11:21:00 [只看该作者]

要求:第一列“日期”导入文件夹名,第二列“代码”导入文件名,第三到第六列导入文件内容

请各位老师帮助

 

[此贴子已经被作者于2015/3/5 8:38:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/23 11:07:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
青岛hhh
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:76 积分:804 威望:0 精华:0 注册:2015/2/13 9:06:00
  发帖心情 Post By:2015/2/25 11:10:00 [只看该作者]

感谢有点甜老师的指导,我先试着导入单个的CSV文件,约14秒,每天约2000个文件,导入时间约7个小时,显然是不可行的,重新学习帮助文件,使用外部数据连接,按例设置外部数据源,提示:不可识别的数据库格式‘E:\SH600004.CSV’。希望各位老师指导该怎么做。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/25 11:20:00 [只看该作者]

导入单个

 

Dim str As String = FileSys.ReadAllText("C:\Documents and Settings\Administrator\My Documents\下载\2016\2016\SH600004.csv", Encoding.Default)
Dim ary() As String = str.Split(chr(13))
DataTables("表A").ResumeRedraw
DataTables("表A").StopRedraw
For i As Integer = 0 To ary.Length - 1
    Dim s() As String = ary(i).Split(",")
    If s.Length >= 5 Then
        Dim nr As DataRow = DataTables("表A").AddNew
        nr("第一列") = s(0).trim()
        nr("第二列") = s(1).trim()
    End If
Next
DataTables("表A").ResumeRedraw


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/25 11:28:00 [只看该作者]

批量就这样做,但这么大的数据量,不建议直接导入foxtable,最好是通过sql语句,直接导入数据库。

 

DataTables("表A").ResumeRedraw
DataTables("表A").StopRedraw
For Each f As String In FileSys.GetFiles("C:\Documents and Settings\Administrator\My Documents\下载\2016\2016")
    Dim str As String = FileSys.ReadAllText(f, Encoding.Default)
    Dim ary() As String = str.Split(chr(13))
    For i As Integer = 0 To ary.Length - 1
        Dim s() As String = ary(i).Split(",")
        If s.Length >= 4 Then
            Dim nr As DataRow = DataTables("表A").AddNew
            nr("第一列") = s(0).trim()
            nr("第二列") = s(1).trim()
        End If
    Next
   
Next
DataTables("表A").ResumeRedraw


 回到顶部
帅哥哟,离线,有人找我吗?
青岛hhh
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:76 积分:804 威望:0 精华:0 注册:2015/2/13 9:06:00
  发帖心情 Post By:2015/2/25 14:20:00 [只看该作者]

感谢有点甜老师给我的帮助,我的想法是不导入数据了,只做一个外部数据源,在外部数据表上做统计,每个外部数据表的统计数据在内部表中生成一行数据(一个记录),这样逐表循环一遍,只把需要的统计数据保存在内部表中,外部数据源(2016文件夹)每日更换不做保存,这样减少数据保存量,减少统计时间,想法不知是否可行?

试了一下外部数据连接,提示:不可识别的数据库格式‘E:\SH600004.CSV’。希望有点甜老师指导。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/25 14:23:00 [只看该作者]

 回复6楼,直接读取CSV文件的文本,循环每一行,统计结果,只有这个办法

 回到顶部
帅哥哟,离线,有人找我吗?
青岛hhh
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:76 积分:804 威望:0 精华:0 注册:2015/2/13 9:06:00
  发帖心情 Post By:2015/2/25 15:21:00 [只看该作者]

怎样直接读取CSV文件的文本,约2000个CSV文件需要循环。

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/25 15:28:00 [只看该作者]

5楼就是啊.你没看?

 回到顶部
帅哥哟,离线,有人找我吗?
青岛hhh
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:76 积分:804 威望:0 精华:0 注册:2015/2/13 9:06:00
  发帖心情 Post By:2015/2/26 15:15:00 [只看该作者]

各位老师好!

    前面我没说清楚,5楼代码我用了,可以批量导入CSV文件,因数据量太大导入约50个文件就提示:引发类型为“System.OutOfMemoryException”的异常。我想每导入一个表做一次统计(在统1或统2表增加一条记录),导入的CSV后表覆盖前表。

    两个统计表:统1,统2。结构一样:列1(输入日期),列2(导入的CSV文件名称,名称前2位是“SH”增加到“统1”表,名称前2位是“SZ”增加到“统2”表),列3(CSV表B列最高值),列4(CSV表B列最低值),列5(CSV表D 列合计值)。

   我不熟悉代码,请各位老师帮我做一下,先表示感谢了

[此贴子已经被作者于2015/2/26 16:26:31编辑过]

 回到顶部
总数 18 1 2 下一页