Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# 从csv文件读取并在.net中处理_C#_.net_Csv_C# 4.0_C# 3.0 - Fatal编程技术网

C# 从csv文件读取并在.net中处理

C# 从csv文件读取并在.net中处理,c#,.net,csv,c#-4.0,c#-3.0,C#,.net,Csv,C# 4.0,C# 3.0,我有一个csv文件,其中有两行 A,1 B,2 我想以以下格式读取此文件并将其转换为以下格式: Name : A, ID: 1 Name : B, ID: 2 我正在使用以下.NETAPI using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8 using (TextFieldParser parser = new TextFieldParser(read

我有一个csv文件,其中有两行

 A,1
 B,2
我想以以下格式读取此文件并将其转换为以下格式:

Name : A, ID: 1
Name : B, ID: 2
我正在使用以下.NETAPI

using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8
            using (TextFieldParser parser = new TextFieldParser(reader))
            {
                parser.TrimWhiteSpace = true; // if you want
                parser.Delimiters = new[] { "," };
                parser.HasFieldsEnclosedInQuotes = true;
                while (!parser.EndOfData)
                {
                    string[] line = parser.ReadFields();

                    List<string> li = line.SelectMany(x => x.Split(',')).ToList();


                }
            }

我将为此创建struct:

struct ValuePair
{
    public string Name  { get; set; }
    public string Id { get; set; }        

    public ValuePair(string name, string id) : this()
    {
        Name = name;
        Id = id;
    }

    public override string ToString()
    {
        return "Name : " + Name + ", Id : " + Id;
    }
}
在您的代码中,您可以使用它:

List<ValuePair> data = new List<ValuePair>();
for(int i = 0; i < li.Count; i += 2) 
   data.Add(new ValuePair(li[i], li[i + 1]));
列表数据=新列表();
对于(int i=0;i

然后使用
data[i].ToString()

您需要自己构建输出字符串

StringBuilder sb = newStringBuilder();
using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8
        using (TextFieldParser parser = new TextFieldParser(reader))
        {
            parser.TrimWhiteSpace = true; // if you want
            parser.Delimiters = new[] { "," };
            parser.HasFieldsEnclosedInQuotes = true;
            while (!parser.EndOfData)
            {
                string[] line = parser.ReadFields();

                List<string> li = line.SelectMany(x => x.Split(',')).ToList();

                sb.AppendLine(String.Format("Name: {0}, ID: {1}", li[0],li[1]));

            }
        }
MessageBox.Show(sb.ToString());

如果你不这样做,那么从新的格式回读可能是不确定的。

你应该考虑使用库来读取和处理CSV文件。解析器是什么?<代码> RealFieldSd();<代码>在(例如)解析第一行时返回?因此,如果
TextFieldParser
类为您提供
StreamReader.ReadLine()
?此函数ReadFields()的确切结果,那么它的优点是什么;将以A、1的形式给出输出。读取数据不是这里的问题,它只是数据的后处理
StringBuilder sb = newStringBuilder();
using (FileStream reader = File.OpenRead(@"Data.csv")) // mind the encoding - UTF8
        using (TextFieldParser parser = new TextFieldParser(reader))
        {
            parser.TrimWhiteSpace = true; // if you want
            parser.Delimiters = new[] { "," };
            parser.HasFieldsEnclosedInQuotes = true;
            while (!parser.EndOfData)
            {
                string[] line = parser.ReadFields();

                List<string> li = line.SelectMany(x => x.Split(',')).ToList();

                sb.AppendLine(String.Format("Name: {0}, ID: {1}", li[0],li[1]));

            }
        }
MessageBox.Show(sb.ToString());
Name: "FirstValue", ID:1
Name: "Sec""ond""Value", ID:2