【发布时间】:2018-07-04 15:47:15
【问题描述】:
我正在使用 oledb 机制读取 csv 文件。我的主要问题是读取时 csv 中的字符串值正在被修剪(两者:在开头和结尾处都有空格)。我在 csv 文件中有一些特定数据,仅在某些情况下需要有这样的空格 - 这就是为什么我在处理后无法处理的原因。必须通过转换来完成。
不幸的是,它必须使用 oledb 和 vb.net 来完成,因为我们的复杂机制基于这些技术。
是否有可能找到 oledb 不会修剪我的字符串的 hack 或解决方法?
以下是我的代码,实际结果和预期:
csv 文件:
Column1|Column2|Column3|Column4
Text1 | Text2| Text3 |Text4
schema.ini
[test.csv]
Format=Delimited(|)
Col1=Column1 Text
Col2=Column2 Text
Col3=Column3 Text
Col4=Column4 Text
代码
Private conn As New OleDbConnection
Private cmd As New OleDbCommand
Private myAccessDataReader As OleDb.OleDbDataReader = Nothing
Sub Main()
Try
Dim dirInfo As String = "C:\csv"
If conn.State = ConnectionState.Open Then
conn.Close()
End If
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dirInfo & ";Extended Properties=""Text;HDR=Yes;"";"
conn.Open()
cmd = New OleDbCommand("SELECT * From [test.csv]", conn)
myAccessDataReader = cmd.ExecuteReader()
If myAccessDataReader.HasRows Then
myAccessDataReader.Read()
End If
Console.WriteLine("|" + myAccessDataReader.Item("Column1") + "|")
Console.WriteLine("|" + myAccessDataReader.Item("Column2") + "|")
Console.WriteLine("|" + myAccessDataReader.Item("Column3") + "|")
Console.WriteLine("|" + myAccessDataReader.Item("Column4") + "|")
Console.ReadKey()
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
实际结果:
|Text1|
|Text2|
|Text3|
|Text4|
预期结果:
|Text1 |
| Text2|
| Text3 |
|Text4|
附言。我在 schema.ini 中尝试过不同的设置:编码、MaxScanRows、固定宽度,但没有任何帮助。
【问题讨论】:
-
我没有看到连接字符串中指定的格式:
Extended Properties="text;HDR=YES;FMT=FixedLength"。然后,如您所知,您必须使用 schema.ini。 Text File Format, Schema.ini File. -
@jimi 格式在模式文件中。
-
如果您要读取整个文件并且不对其进行查询,那么我建议您将文件读取到数据表中。 OLE DB CSV 启用了 ansi 填充,但无法解决。
-
@brax 你完全破坏了 OP 的输出。