Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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
我需要帮助使用C#split命令拆分.csv文件中的记录_C#_Csv - Fatal编程技术网

我需要帮助使用C#split命令拆分.csv文件中的记录

我需要帮助使用C#split命令拆分.csv文件中的记录,c#,csv,C#,Csv,我尝试拆分的记录的格式如下所示: 987,"This is second field, it contains multiple commas, but is enclosed in quotes, 88123, 99123", 1221, lastfield 我正在使用代码: char[] delimiters = new char[] {',' }; string[] parts = line.Split(delimiters, StringSplitOptions.None); 我得到

我尝试拆分的记录的格式如下所示:

987,"This is second field, it contains multiple commas, but is enclosed in quotes, 88123, 99123", 1221, lastfield
我正在使用代码:

char[] delimiters = new char[] {',' };
string[] parts = line.Split(delimiters, StringSplitOptions.None);

我得到分割结果,但它不会将引号分隔的字段视为一个字段。我需要得到一个4个字段的结果,但我得到了每个逗号字段。如何调整/更改代码以获得所需的结果?

string.Split()。您将需要使用正则表达式(在C#中,
Regex
类)。

@Tavya在
字符串中是正确的。Split
不适用于您,因为它不处理带引号的行。有很多方法可以剥下这只众所周知的猫的皮,包括使用正则表达式或使用谷歌搜索中可以找到的众多CSV解析器之一

另一个简单的方法是使用VisualBasic的
TextFieldParser
类。只需在项目中添加对Microsoft.VisualBasic.dll的引用,并在文件头中添加“using Microsoft.VisualBasic.FileIO”。然后你可以做这样的事情

    private List<string> parseFields (string lineToParse)
    {
        //initialize a return variable
        List<string> result = new List<string>();

        //read the line into a MemoryStream
        byte[] bytes = Encoding.ASCII.GetBytes(lineToParse);
        MemoryStream stream = new MemoryStream(bytes);

        //use the VB TextFieldParser to do the work for you
        using (TextFieldParser parser = new TextFieldParser(stream))
        {
            parser.TextFieldType = FieldType.Delimited;
            parser.Delimiters = new string[] { "," };
            parser.HasFieldsEnclosedInQuotes = true;
            //parse the fields
            while ( parser.EndOfData == false)
            {
                result = parser.ReadFields().ToList();
            }
        }

        return result;
    }
私有列表解析字段(字符串lineToParse)
{
//初始化返回变量
列表结果=新列表();
//把这行读入内存流
byte[]bytes=Encoding.ASCII.GetBytes(lineToParse);
MemoryStream stream=新的MemoryStream(字节);
//使用VB TextFieldParser为您完成这项工作
使用(TextFieldParser=newtextfieldparser(流))
{
parser.TextFieldType=FieldType.Delimited;
paraser.Delimiters=新字符串[]{“,”};
parser.HasFieldsEnclosedInQuotes=true;
//解析字段
while(parser.EndOfData==false)
{
结果=parser.ReadFields().ToList();
}
}
返回结果;
}
结果将是:

987

这是第二个字段,它包含多个逗号,但用引号括起来,88123,
99123

1221

拉斯菲尔德

和(更好)