从csv文件中读取并在.net中处理它
本文关键字:net 处理 读取 csv 文件 | 更新日期: 2023-09-27 18:02:44
我有一个csv文件,其中有2行。
A,1
B,2
我想以以下格式读取此文件并将其转换为以下格式:
Name : A, ID: 1
Name : B, ID: 2
我正在使用下面的。net api
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();
}
}
在li变量中,我能够在分裂后获得单个元素,例如:A 1,但我不知道如何将关键属性添加到它,使名称:A, ID: 1
编辑:
我需要它在一个列表格式最后,因为它是很容易分离的实体基于这一点如:
List{
List1 = Name : A,ID:1
List2 = Name : B,ID:2
}
我要创建一个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]));
则使用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());
请注意,您可能希望用""
分隔(文本)值(假设您希望从新格式中回读),并且您还需要决定在值中出现"
时转义的合适方案。一种常见的方法是将值中的每个"
替换为""
。
如FirstValue 1证券交易委员会"作为对"价值",2
将映射到
Name: "FirstValue", ID:1
Name: "Sec""ond""Value", ID:2
如果你不这样做,那么从你的新格式回读可能是不确定的。