我正在使用TextFieldParserClass来读取逗号分隔值(.csv)文件.此文件中的字段用双引号括起来"Field1","Field2".
因此,要读取文件,我将object 的HasFieldsEnclosedInQuotes属性设置TextFieldParser为true.但是我得到一个错误,MalformedLineException当任何字段在开头包含双引号("+")时.
示例:""Field2"with additional"这里我应该"Field2" with additional看作输出.
但是,如果"除了第一个位置以外的任何地方那么它工作正常 像线条一样"Field2 "with" additional"完美地工作,并给我Field2 "with" additional
输出.
有没有人有同样的问题?有什么办法可以解决这个问题吗?
这是我的代码:
Private Sub ReadTextFile(ByVal txtFilePath As String)
Dim myReader As tfp = New Microsoft.VisualBasic.FileIO.TextFieldParser(txtFilePath)
myReader.Delimiters = New String() {","}
myReader.TextFieldType = FileIO.FieldType.Delimited
myReader.HasFieldsEnclosedInQuotes = True
myReader.TrimWhiteSpace = True
Dim currentRow As String()
Dim headerRow As Integer = 0
While Not myReader.EndOfData
Try
currentRow = myReader.ReadFields()
'Read …Run Code Online (Sandbox Code Playgroud) 我正在使用TextFieldParser解析CSV文件导入数据库EntityFramework.
TextFieldParser将CSV文件的每一行作为a返回string[].为了保存对象,我需要从每一行构建一个对象.有什么方法可以使用AutoMapper吗?
我的对象结构是这样的:
public class Person
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string PhoneNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的CSV行格式如下:
名字,中间名,姓氏,地址,******中国
使用Microsoft.VisualBasic.FileIO中的TextFieldParser,可以解析CSV文件,如下所示:
using (TextFieldParser parser = new TextFieldParser(CSVPath))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData) { string[] fields = parser.ReadFields(); }
}
Run Code Online (Sandbox Code Playgroud)
但是,这依赖于使用CSV文件路径初始化TextFieldParser.是否可以产生相同的效果,但在传递包含数据记录本身的字符串时?
例如,对于Data1,6.5,"Data3 ""MoreData"""保存在字符串变量中的值为(注意由于转义的引号引用的引号括起来的最后数据)的CSV数据记录,我可以将数据转换为字符串数组,如下所示:
[0] = "Data1"
[1] = "6.5"
[2] = "Data3 \"MoreData\""
Run Code Online (Sandbox Code Playgroud)