C# 从文本文件中分离一行中的数据
C# separating data within a line from a text file
我有一个数据文件
Name; LastName; EurosCents;
Name2; LastName2; EurosCents2;
(例如:
John; Smith; 4,20;
Josh; Peck; 6,50;
)
我需要读取数据然后对它做一些进一步的处理...有什么方法可以读取这些行并保存它们吗?因为读取文本文件的唯一方法是一次读取整行。
File
API 提供多种读取文件的选项。以下是一种可能的处理方式:
foreach(var line in File.ReadAllLines(path))
{
var splitted = line.Split(';');
var name = splitted.ElementAtOrDefault(0);
var lastName = splitted.ElementAtOrDefault(1);
var cents = Decimal.Parse(splitted.ElementAtOrDefault(2));
}
读取整个文件的简单代码如下
string[] test(string path)
{
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string[] str = sr.ReadToEnd().Split(';');
sr.Close();
return str;
}
var lst = File.ReadAllLines(yourFilePath).Select(x => new
{
FirstName = x.Split(';')[0]
LastName = x.Split(';')[1]
Value = decimal.Parse(x.Split(';')[2])
}).ToList();
使用
lst[7].FirstName = "xxx";
Console.WriteLine(lst[2].Value);
等...
如果您习惯使用 LINQ,解析将非常容易。
下面一行可以让你得到一个层次结构的文件。
var theselines = File.ReadLines(@"C:\Test.txt").Select(l => l.Split(','));
你可以通过调试看到上面一行的结果。
稍后您可以使用任何逻辑从每一行获取所需的数据,而无需使用 foreach 循环。
var Data = theselines.Select(l => new
{
id = l.Where(t => t.Contains("01")).FirstOrDefault(),
Price = l.Where(t => t.Contains(",")).FirstOrDefault(),
Firstname= l[0],
lastname = l[1]
});
前提是数据本身(名字和分)不能包含;
才能得到
逗号分隔值中的项目你可以拆分:
var data = File
.ReadLines(@"C:\MyData.csv")
// .Skip(1) // <- in case you have caption to skip
.Select(line => line.Split(';'))
.Select(items => new {
Name = items[0],
LastName = items[1],
EuroCents = decimal.Parse(items[2]) //TODO: check type and its format
});
//.ToArray(); // <- if you want to materialize as, say, an array
那你就可以用了
foreach (var item in data) {
if (item.EuroCents > 10) {
...
}
}
我有一个数据文件
Name; LastName; EurosCents;
Name2; LastName2; EurosCents2;
(例如:
John; Smith; 4,20;
Josh; Peck; 6,50;
)
我需要读取数据然后对它做一些进一步的处理...有什么方法可以读取这些行并保存它们吗?因为读取文本文件的唯一方法是一次读取整行。
File
API 提供多种读取文件的选项。以下是一种可能的处理方式:
foreach(var line in File.ReadAllLines(path))
{
var splitted = line.Split(';');
var name = splitted.ElementAtOrDefault(0);
var lastName = splitted.ElementAtOrDefault(1);
var cents = Decimal.Parse(splitted.ElementAtOrDefault(2));
}
读取整个文件的简单代码如下
string[] test(string path)
{
System.IO.StreamReader sr = new System.IO.StreamReader(path);
string[] str = sr.ReadToEnd().Split(';');
sr.Close();
return str;
}
var lst = File.ReadAllLines(yourFilePath).Select(x => new
{
FirstName = x.Split(';')[0]
LastName = x.Split(';')[1]
Value = decimal.Parse(x.Split(';')[2])
}).ToList();
使用
lst[7].FirstName = "xxx";
Console.WriteLine(lst[2].Value);
等...
如果您习惯使用 LINQ,解析将非常容易。 下面一行可以让你得到一个层次结构的文件。
var theselines = File.ReadLines(@"C:\Test.txt").Select(l => l.Split(','));
你可以通过调试看到上面一行的结果。 稍后您可以使用任何逻辑从每一行获取所需的数据,而无需使用 foreach 循环。
var Data = theselines.Select(l => new
{
id = l.Where(t => t.Contains("01")).FirstOrDefault(),
Price = l.Where(t => t.Contains(",")).FirstOrDefault(),
Firstname= l[0],
lastname = l[1]
});
前提是数据本身(名字和分)不能包含;
才能得到
逗号分隔值中的项目你可以拆分:
var data = File
.ReadLines(@"C:\MyData.csv")
// .Skip(1) // <- in case you have caption to skip
.Select(line => line.Split(';'))
.Select(items => new {
Name = items[0],
LastName = items[1],
EuroCents = decimal.Parse(items[2]) //TODO: check type and its format
});
//.ToArray(); // <- if you want to materialize as, say, an array
那你就可以用了
foreach (var item in data) {
if (item.EuroCents > 10) {
...
}
}