从 csv 文件中读取并在 .net 中处理它
Reading from a csv file and processing it in .net
我有一个包含 2 行的 csv 文件。
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 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());
请注意,您可能想用 ""
分隔(文本)值(假设您想从新格式中读回),并且您还需要确定合适的转义方案"
当它出现在值中时。
一种常见的方法是将值中的每个 "
替换为 ""
.
例如
第一值,1
秒"ond"值",2
将映射到
Name: "FirstValue", ID:1
Name: "Sec""ond""Value", ID:2
如果您不这样做,那么从您的新格式回读可能不确定。
我有一个包含 2 行的 csv 文件。
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 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());
请注意,您可能想用 ""
分隔(文本)值(假设您想从新格式中读回),并且您还需要确定合适的转义方案"
当它出现在值中时。
一种常见的方法是将值中的每个 "
替换为 ""
.
例如 第一值,1 秒"ond"值",2
将映射到
Name: "FirstValue", ID:1
Name: "Sec""ond""Value", ID:2
如果您不这样做,那么从您的新格式回读可能不确定。