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


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

主题:从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 [只看该作者]


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


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

你csv文件发上来测试。

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


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

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


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


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

1、你的文件看了一下,中间逗号是,和分割的逗号, 是不同的。

 

2、代码不影响你这个excel文件的数据的读取吧?如果影响,说明第几行有问题。


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


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

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

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


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

参考代码

 

Dim str As String = """脑梗死,未特指"",I63.9,""123,456789,123333"",abc"
Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<="").+?(?="")|(?<=,|^)[^""]*?(?=,|$)")
For i As Integer = 0 To mc.count-1
    msgbox(mc(i).value.trim(","))
Next


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


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

参考

 

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 mc = System.Text.RegularExpressions.Regex.Matches(rs(i), "(?<="").+?(?="")|(?<=,|^)[^""]*?(?=,|$)")
        For j As Integer = 0 To mc.count-1
            output.show(mc(j).value.trim(","))
        Next
        'Dim nr As DataRow = DataTables("精简数据库").AddNew
        'nr("根本死亡原因") = mc(0).value
        'nr("根本死亡原因ICD编码") = mc(1).value
    Next
End If


 回到顶部
帅哥哟,离线,有人找我吗?
wzl1990
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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), "(?<="").+?(?="")|(?<=,|^)[^""]*?(?=,|$)")这行代码,哈哈

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