Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 读取字段中包含换行符的Csv文件_Vb.net_Csv_Vb.net 2010 - Fatal编程技术网

Vb.net 读取字段中包含换行符的Csv文件

Vb.net 读取字段中包含换行符的Csv文件,vb.net,csv,vb.net-2010,Vb.net,Csv,Vb.net 2010,我有以下代码来读取csv文件: Dim strLineValue As String Using sr As StreamReader = File.OpenText("FilePath") strLineValue = sr.ReadLine Do While strLineValue IsNot Nothing strLineValue = sr.ReadLine n += 1 Loop End Using 我的问题是,我

我有以下代码来读取csv文件:

Dim strLineValue As String
Using sr As StreamReader = File.OpenText("FilePath")

strLineValue = sr.ReadLine
      Do While strLineValue IsNot Nothing
          strLineValue = sr.ReadLine
           n += 1
      Loop
End Using
我的问题是,我遇到一个csv文件,其行如下:

 "Text1 LF LF text2","text3",text4,text5, , , , ,LF 
 "Text6 LF LF text8","text9",text10,text11, , , , ,LF 
其中LF是换行符

所以我得到了这样的东西,这是错误的

Text1

text2    text3    text4    text5
Text6

text8    text9    text10   text11
有没有办法克服这种类型文件中代码的错误行为

PS.1.如果我在excel中打开csv文件,它会正确识别行,它只有一个多行第一单元格
2.我在想,也许前两个LF只是LF,我在每行末尾的LF是LF和CR,但我如何才能看到差异(我打开Word中的csv文件以查看字符)

我会尝试

strLineValue = strLineValue.replace(vblf,"")
你看,这条线的尽头确实有一个CR

您可以在十六进制编辑器中看到差异,lf=10和cr=13

chr(10) & chr(13) = vbcrlf

有些字段用双引号括起来-
。在CSV文件中,这通常表示您应该获取整个字段,而不是解析它

这在课堂上很容易做到。下面是一个例子:

Imports Microsoft.VisualBasic.FileIO

Dim parser As TextFieldParser = New TextFieldParser("TestFile.txt")

parser.Delimiters = New String() {","}
parser.HasFieldsEnclosedInQuotes = True

While Not parser.EndOfData

    Dim fields As String() = parser.ReadFields()

End While
这将保留引用字段中的换行符:

"Text1 LF LF text2" "text3" "text"4 "text5" blank blank blank blank blank

这是一个可行的解决方案,但如果有原因,单元格中的数据是多行的,OP可能希望保留格式。你是对的。0A代表LF,0A 0D代表LFCR。所以我有两个LF,然后是一个LFCR。那么我如何在代码中克服这一点。你的代码不工作strLineValue是null@Tim例如他不在乎(显然,我们需要一个空格,而不是LF)问题是并非所有的数据都在quotes@Nianios-这没关系。
TextFieldParser
将处理包含混合字段的行(引号和非引号)。我上面发布的代码示例是在您的示例输入上运行的,我发布的输出是读取字段后第一行的数组元素。对我来说,如果字段没有包含在“”:-(它会将LF视为行尾,一切都会乱七八糟)