Foxtable(狐表)用户栏目专家坐堂 → 从CSV文件中读取数据,使用逗号','分割问题。


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

主题:从CSV文件中读取数据,使用逗号','分割问题。

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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
从CSV文件中读取数据,使用逗号','分割问题。  发帖心情 Post By:2018/11/9 15:43:00 [显示全部帖子]

 Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

 dlg.Filter= "Excel文件|*.csv" '设置筛选器
        Dim strs As String = FileSys.ReadAllText(dlg.FileName, encoding.default)
        Dim rs() As String = strs.Split(chr(10))
        For i As Integer = 1 To rs.Length-2
            Dim s() As String = rs(i).Split(",")
            Dim nr As DataRow = DataTables("精简数据库").AddNew

             nr("根本死亡原因") = s(0)
             nr("根本死亡原因ICD编码") = s(1)
        Next

 

如上代码,当我导入csv格式读取数据的时候,那第一行来说,假如csv上s(0)=支气管或肺,未特指 s(1)=C34.9。因为,作为分隔符的问题,实际上导入的nr("根本死亡原因") =支气管或肺 nr("根本死亡原因ICD编码") =未特指。能否有办法对单元格内的,不分割。


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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/9 15:49:00 [显示全部帖子]


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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
上传文件  发帖心情 Post By:2018/11/9 15:57:00 [显示全部帖子]

这个文件试一下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:1-8月户籍死亡测试.zip


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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/9 16:18:00 [显示全部帖子]

偶尔存在一些事用英文符号的,我用txt看了下,有英文符号,的都加了双引号,能否先对双引号进行判断。
csv文件存在错误的一行:1963/4/19,54岁,1,01 汉族,2,2 已婚,27,27 农民,7,7 初中及以下,本县区,河疃村,3207071600,,本县区,32070716065,河疃村,3207071600,河疃村,32070716065,河疃村,2018/4/5,3,3 家中,韩林,,河疃村,"脑梗死,未特指",I63.9,,,,,,,,,,,,,,,,,脑梗死,未特指,I63.9,2,2 二级医院,4,4 临床+理化,XXX,,2018/5/9,13754,卫生院,,,,,,,,,,,,,2018/5/9 14:45,XXX`26150,1,2018/5/16,,0,死亡卡,录入

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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/9 16:37:00 [显示全部帖子]

传的文件倒数第三行就有问题:"未特指的机动车辆事故中的人员损伤,交通性",V89.2

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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/9 16:55:00 [显示全部帖子]

OK,刚刚用了笨方法临时解决了下
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.csv" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim strs As String = FileSys.ReadAllText(dlg.FileName, encoding.default)
    Dim rs() As String = strs.Split(chr(10))
    For i As Integer = 1 To rs.Length-2
        Dim s() As String = rs(i).Split(",")
        Dim nr As DataRow = DataTables("常规数据库").AddNew
        If s(0).Contains("""") Then         
        nr("根本死亡原因") = s(0).Remove(0,1) & s(1)
        nr("ICD编码") = s(2)    
        Else
        nr("根本死亡原因") = s(0)
        nr("ICD编码") = s(1)
        End If
    Next
End If

说实话,要的就是System.Text.RegularExpressions.Regex.Matches(rs(i), "(?<="").+?(?="")|(?<=,|^)[^""]*?(?=,|$)")这行代码,哈哈

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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/9 18:28:00 [显示全部帖子]

又来了一个问题,我这边有个csv文件,就是用excel打开是2行数据(除去表头),用notepad打开是3行数据(除去表头)。因而用 Dim rs() As String = strs.Split(chr(10))的方法是读取了3组rs(),实际上是2组rs()。文件我上传了,再劳烦你看看了。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:1-8月户籍死亡 - 副本.zip


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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/11 10:51:00 [显示全部帖子]

能省一步,一万人不就省一万步了吗

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


加好友 发短信
等级:幼狐 帖子:72 积分:755 威望:0 精华:0 注册:2017/10/25 9:48:00
  发帖心情 Post By:2018/11/11 10:53:00 [显示全部帖子]

十分感谢,哈哈。光往正则表达式那边想了。

 回到顶部