以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]批量导入TXT文件 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=149456) |
-- 作者:天一生水 -- 发布时间:2020/5/2 19:08:00 -- [求助]批量导入TXT文件 老师好! 批量追加导入TXT文件时,可能会产生重复数据。 我想借鉴利用字典批量导入execl文件的方式,如果数据表已有数据的【代码】和【时间】与导入数据相同,那么就覆盖或跳过。 请老师帮助修改一下按钮代码!谢谢! |
-- 作者:有点蓝 -- 发布时间:2020/5/5 11:37:00 -- MainTable = Tables("股票信息明细表") \'e.Sender.Enabled = False Tables("股票信息明细表").StopRedraw() Dim dlg As New OpenFileDialog dlg.Filter = "TXT文件|*.TXT" dlg.MultiSelect = True If dlg.ShowDialog = DialogResult.Ok Then Dim dt As DataTable = DataTables("股票信息明细表") For Each file As String In dlg.FileNames Dim strs As String = FileSys.ReadAllText(file) strs = strs.Trim().Replace(" ", ",").Replace(vblf,"") Dim name As String = FileSys.GetName(file.SubString(0, file.length - 4)) Dim rs() As String = strs.Split(vbcr) Dim flag As Boolean For i As Integer = 0 To rs.Length - 1 Dim cs() As String = rs(i).Split(",") If cs(0).trim() = "" Then Continue For Dim dr As DataRow = dt.Find("代码 = \'" & name & "\' and 时间 = \'" & cs(0) & "\'") If dr IsNot Nothing Then Dim Result = MessageBox.Show("有重复,是否覆盖导入?"& vbcrlf &"是---覆盖导入(将更新原有数据)"& vbcrlf &"否---新增导入(仅增加新数据)", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If Result = DialogResult.Yes Then flag = True Else flag = False End If Exit For End If Next For i As Integer = 0 To rs.Length - 1 Dim cs() As String = rs(i).Split(",") If cs(0).trim() = "" Then Continue For Dim dr As DataRow = dt.Find("代码 = \'" & name & "\' and 时间 = \'" & cs(0) & "\'") If dr IsNot Nothing If flag = False Then Continue For Else dr = DataTables("股票信息明细表").Addnew() End If dr("代码") = name dr("时间") = cs(0) dr("开盘价") = cs(1) dr("最高价") = cs(2) dr("最低价") = cs(3) dr("收盘价") = cs(4) dr("成交量") = cs(5) dr("金额") = cs(6) Next Next dt.DeleteFor("时间 Is Null") End If Tables("股票信息明细表").ResumeRedraw() \'e.Form.Close() msgbox("导入结束")
|
-- 作者:天一生水 -- 发布时间:2020/5/6 16:54:00 -- 谢谢蓝老师! 我测试如果选择覆盖导入时,速度会非常慢。 当表格为空时,如果用普通追加导入实例中三个txt文件,不到0.7秒,但是如果选择覆盖导入会耗时近5秒。是哪里的原因?
|
-- 作者:有点蓝 -- 发布时间:2020/5/6 17:10:00 -- 没有办法,要增加判断,就多了一次循环和查找遍历。每一行都要查询是否有旧数据以覆盖。 |
-- 作者:有点蓝 -- 发布时间:2020/5/6 17:11:00 -- 可以参考这里自己改进一下 |
-- 作者:天一生水 -- 发布时间:2020/5/12 12:08:00 -- 蓝老师好! 如果导入通达信股票软件生成的日线数据,会提示日期列为字符类型(附件中的SH600008),感觉文本文件不会记录下来字符串的格式~ 怎样修改一下代码才能通用? 另外,老师提示参考http://www.foxtable.com/webhelp/topics/2225.htm 修改代码,不知道从哪里下手,请老师指教。 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2020/5/12 13:36:00 -- SH600008里面的数据是按tab键分隔的,不是空格 改为 strs = strs.Trim().Replace(" ", ",").Replace(vbtab, ",").Replace(vblf,"") |
-- 作者:天一生水 -- 发布时间:2020/5/14 15:03:00 -- 请老师帮忙看看计算涨跌幅的代码,存在下列问题: 1、只计算追加数据的涨跌幅,以前计算过的就跳过去,但是行数cn的计数不对; 2、要计算之前是不是要把数据都加载进来,因为刚追加的第一条数据需要利用上一条数据的收盘价; 3、sql外部数据源能不能在后台计算,不加载数据? 代码如下: Dim cn As Integer = 0 \'计算行数 Dim t As Table = Tables("股票数据") Dim codes As List (Of String) = DataTables("股票数据").GetValues("代码","","时间") Dim st As Date = Date.Now For Each code As String In codes Dim drlist As List (Of DataRow) = DataTables("股票数据").Select("代码 = \'" & code & "\'") For i As Integer = 0 To drlist.Count - 1 If drlist(i)("涨跌幅") = Nothing Then \'如果涨跌幅为空 cn +=1 \'数据行数 If i = 0 Then drlist(i)("涨跌幅") = (drlist(i)("收盘价") - drlist(i)("开盘价")) / drlist(i)("开盘价") * 1% Else drlist(i)("涨跌幅") = (drlist(i)("收盘价") - drlist(i - 1)("收盘价")) / drlist(i - 1)("收盘价") * 1% End If End If Next Next MessageBox.Show("计算: " & cn & "行数据" & vbcrlf & "耗时: " & (Date.Now - st).TotalSeconds & "秒") |
-- 作者:有点蓝 -- 发布时间:2020/5/14 15:12:00 -- 1/2、类似流水账的用法,参考:http://www.foxtable.com/webhelp/topics/2136.htm 3、应该是可以的,自行学习一下存储过程的用法。
|