C# 拆分csv,其中一个选项卡是数组
我有一个.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" 现在
"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));
}
}
这可能会帮助您:)这是否回答了您的问题?这可能对你有帮助:)这能回答你的问题吗?