Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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,其中一个选项卡是数组_C#_Csv_Parsing - Fatal编程技术网

C# 拆分csv,其中一个选项卡是数组

C# 拆分csv,其中一个选项卡是数组,c#,csv,parsing,C#,Csv,Parsing,我有一个.csv文件,它是这样的 "a1,b1,c1,d1", foo1, goo1 "a2,b2,c2,d2", foo2, goo2 我想把它解析为 string[] letters string foo string goo 所以数据是 letters = [a1,b1,c1,d1] foo = "foo1" goo = "goo1" -------------------- letters = [a2,b2,c2,d2] foo = "foo2" goo = "goo2" 现在

我有一个.csv文件,它是这样的

"a1,b1,c1,d1", foo1, goo1 
"a2,b2,c2,d2", foo2, goo2
我想把它解析为

string[] letters
string foo
string goo
所以数据是

letters = [a1,b1,c1,d1]
foo = "foo1"
goo = "goo1"
--------------------
letters = [a2,b2,c2,d2]
foo = "foo2"
goo = "goo2"
现在

不行,我怎么能解决

你说:

现在是line.Split(',');行不通

起初,这没有任何意义,因为您没有向我们展示任何使用
line.Split()
的代码,在正常情况下,在处理CSV文件时也不需要使用
line.Split()

因此,这告诉我们,不是使用CSV库来读取CSV文件,而是尝试自己用自定义的手写代码来解析文件。当然,您正在以最简单的方式进行此操作,即使用
line.Split()

不要那样做

帮自己一个忙,从NuGet获得“CSVHelper”库,让它为您进行CSV解析。这就是我所说的“正常情况”,这就是为什么通常不需要
line.Split()

然后,将数组字段读入字符串后,可以继续使用
field.Split()

CSVHelper库有点过分了,因为它比您实际需要的要多得多。例如,它可以将CSV文件中的行直接读取到表示CSV文件行的类的成员中。但这没关系:几十年来,整个软件行业都习惯于使用现有库来完成手头的任何琐碎任务,即使从库提供的全部功能中只需要一小部分功能。

你说:

现在是line.Split(',');行不通

起初,这没有任何意义,因为您没有向我们展示任何使用
line.Split()
的代码,在正常情况下,在处理CSV文件时也不需要使用
line.Split()

因此,这告诉我们,不是使用CSV库来读取CSV文件,而是尝试自己用自定义的手写代码来解析文件。当然,您正在以最简单的方式进行此操作,即使用
line.Split()

不要那样做

帮自己一个忙,从NuGet获得“CSVHelper”库,让它为您进行CSV解析。这就是我所说的“正常情况”,这就是为什么通常不需要
line.Split()

然后,将数组字段读入字符串后,可以继续使用
field.Split()

CSVHelper库有点过分了,因为它比您实际需要的要多得多。例如,它可以将CSV文件中的行直接读取到表示CSV文件行的类的成员中。但这没关系:几十年来,整个软件行业都习惯于使用现有的库来完成手头的任何琐碎任务,即使从库提供的全部功能中只需要一小部分。

如果你能将
“a1,b1,c1,d1”,foo1,goo1
放在同一个列表中,您可以尝试以下方法:

using System;
using System.Collections.Generic;

class MainClass 
{
  public static void Main (string[] args) 
  {
    List<String> items = new List<String>();
    string[] stuff = {"a1","b1","c1","d1", "foo1", "goo1"};
    items.AddRange(stuff);
    items.ForEach(i => Console.Write("{0}\t", i));
    List<String> letters = new List<String>();
    List<String> foo = new List<String>();
    List<String> goo = new List<String>();
    foreach(string a in items)
    {
      if(a.Contains("foo"))
      {
        foo.Add(a);
      }
      else if(a.Contains("goo"))
      {
        goo.Add(a);
      }
      else
      {
        letters.Add(a);
      }
    }
    letters.ForEach(i => Console.Write("{0}\t", i));
    foo.ForEach(i => Console.Write("{0}\t", i));
    goo.ForEach(i => Console.Write("{0}\t", i));
  }
}
使用系统;
使用System.Collections.Generic;
类主类
{
公共静态void Main(字符串[]args)
{
列表项=新列表();
字符串[]stuff={“a1”、“b1”、“c1”、“d1”、“foo1”、“goo1”};
items.AddRange(stuff);
items.ForEach(i=>Console.Write(“{0}\t”,i));
列表字母=新列表();
List foo=新列表();
List goo=新列表();
foreach(项目中的字符串a)
{
如果(a.包含(“foo”))
{
foo.加入(a);
}
否则,如果(a.含有(“粘液”))
{
添加(a);
}
其他的
{
信函。添加(a);
}
}
letters.ForEach(i=>Console.Write(“{0}\t”,i));
ForEach(i=>Console.Write(“{0}\t”,i));
ForEach(i=>Console.Write(“{0}\t”,i));
}
}
如果您可以将
“a1、b1、c1、d1”、foo1、goo1
放入同一个列表,您可以尝试以下操作:

using System;
using System.Collections.Generic;

class MainClass 
{
  public static void Main (string[] args) 
  {
    List<String> items = new List<String>();
    string[] stuff = {"a1","b1","c1","d1", "foo1", "goo1"};
    items.AddRange(stuff);
    items.ForEach(i => Console.Write("{0}\t", i));
    List<String> letters = new List<String>();
    List<String> foo = new List<String>();
    List<String> goo = new List<String>();
    foreach(string a in items)
    {
      if(a.Contains("foo"))
      {
        foo.Add(a);
      }
      else if(a.Contains("goo"))
      {
        goo.Add(a);
      }
      else
      {
        letters.Add(a);
      }
    }
    letters.ForEach(i => Console.Write("{0}\t", i));
    foo.ForEach(i => Console.Write("{0}\t", i));
    goo.ForEach(i => Console.Write("{0}\t", i));
  }
}
使用系统;
使用System.Collections.Generic;
类主类
{
公共静态void Main(字符串[]args)
{
列表项=新列表();
字符串[]stuff={“a1”、“b1”、“c1”、“d1”、“foo1”、“goo1”};
items.AddRange(stuff);
items.ForEach(i=>Console.Write(“{0}\t”,i));
列表字母=新列表();
List foo=新列表();
List goo=新列表();
foreach(项目中的字符串a)
{
如果(a.包含(“foo”))
{
foo.加入(a);
}
否则,如果(a.含有(“粘液”))
{
添加(a);
}
其他的
{
信函。添加(a);
}
}
letters.ForEach(i=>Console.Write(“{0}\t”,i));
ForEach(i=>Console.Write(“{0}\t”,i));
ForEach(i=>Console.Write(“{0}\t”,i));
}
}

这可能会帮助您:)这是否回答了您的问题?这可能对你有帮助:)这能回答你的问题吗?