以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 从CSV文件中读取数据,使用逗号','分割问题。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=127266) |
||||
-- 作者:wzl1990 -- 发布时间:2018/11/9 15:43:00 -- 从CSV文件中读取数据,使用逗号','分割问题。 Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog dlg.Filter= "Excel文件|*.csv" \'设置筛选器 nr("根本死亡原因") = s(0)
如上代码,当我导入csv格式读取数据的时候,那第一行来说,假如csv上s(0)=支气管或肺,未特指 s(1)=C34.9。因为,作为分隔符的问题,实际上导入的nr("根本死亡原因") =支气管或肺 nr("根本死亡原因ICD编码") =未特指。能否有办法对单元格内的,不分割。 |
||||
-- 作者:wzl1990 -- 发布时间:2018/11/9 15:49:00 -- 直白一点的话就是 如果CSV某单元格的数据本身含有逗号,这里如何避免分隔出错? |
||||
-- 作者:有点甜 -- 发布时间:2018/11/9 15:50:00 -- 你csv文件发上来测试。 |
||||
-- 作者:wzl1990 -- 发布时间:2018/11/9 15:57:00 -- 上传文件 这个文件试一下
|
||||
-- 作者:有点甜 -- 发布时间:2018/11/9 16:13:00 -- 1、你的文件看了一下,中间逗号是,和分割的逗号, 是不同的。
2、代码不影响你这个excel文件的数据的读取吧?如果影响,说明第几行有问题。 |
||||
-- 作者:wzl1990 -- 发布时间: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 -- 发布时间:2018/11/9 16:37:00 -- 传的文件倒数第三行就有问题:"未特指的机动车辆事故中的人员损伤,交通性",V89.2 |
||||
-- 作者:有点甜 -- 发布时间:2018/11/9 16:47:00 -- 参考代码
Dim str As String = """脑梗死,未特指"",I63.9,""123,456789,123333"",abc" |
||||
-- 作者:有点甜 -- 发布时间:2018/11/9 16:48:00 -- 参考
Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog |
||||
-- 作者:wzl1990 -- 发布时间: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), "(?<="").+?(?="")|(?<=,|^)[^""]*?(?=,|$)")这行代码,哈哈
|