以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何批量导入csv文件  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=64501)

--  作者:青岛hhh
--  发布时间:2015/2/16 11:21:00
--  [求助]如何批量导入csv文件

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

请各位老师帮助

 

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

--  作者:有点甜
--  发布时间:2015/2/23 11:07:00
--  
参考例子

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=62227&skin=0


--  作者:青岛hhh
--  发布时间:2015/2/25 11:10:00
--  
感谢有点甜老师的指导,我先试着导入单个的CSV文件,约14秒,每天约2000个文件,导入时间约7个小时,显然是不可行的,重新学习帮助文件,使用外部数据连接,按例设置外部数据源,提示:不可识别的数据库格式‘E:\\SH600004.CSV’。希望各位老师指导该怎么做。
--  作者:有点甜
--  发布时间: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


--  作者:有点甜
--  发布时间: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
--  发布时间:2015/2/25 14:20:00
--  

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

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


--  作者:有点甜
--  发布时间:2015/2/25 14:23:00
--  
 回复6楼,直接读取CSV文件的文本,循环每一行,统计结果,只有这个办法
--  作者:青岛hhh
--  发布时间:2015/2/25 15:21:00
--  
怎样直接读取CSV文件的文本,约2000个CSV文件需要循环。
--  作者:Bin
--  发布时间:2015/2/25 15:28:00
--  
5楼就是啊.你没看?
--  作者:青岛hhh
--  发布时间: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编辑过]