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) {
     ...
   }
 }