在 C# 中读取文本文件并按逗号拆分

本文关键字:拆分 文件 读取 取文本 | 更新日期: 2023-09-27 18:34:06

我有一个格式如下的文本文件

Number,Name,Age

我想将此文本文件第一列的"数字"读取到数组中以查找重复项。 这是我尝试在文件中读取的两种方法。

 string[]  account = File.ReadAllLines(path);
 string readtext = File.ReadAllText(path);

但是每次我尝试拆分数组以仅获取第一个逗号左侧的内容时,我都失败了。有什么想法吗?谢谢。

在 C# 中读取文本文件并按逗号拆分

您需要显式拆分数据才能访问其各个部分。否则,您的程序如何能够决定它用逗号分隔?

访问我想到的号码的最简单方法是这样的:

var lines = File.ReadAllLines(path);
var firstLine = lines[0];
var fields = firstLine.Split(',');
var number = fields[0]; // Voilla!

您可以通过将数字解析为 int 或其他数字类型(如果它确实是一个数字)来更进一步。另一方面,如果您只想测试唯一性,则实际上没有必要。

如果您希望根据Number的所有重复行:

var numDuplicates = File.ReadLines(path)
    .Select(l => l.Trim().Split(','))
    .Where(arr => arr.Length >= 3)
    .Select(arr => new { 
        Number = arr[0].Trim(),
        Name   = arr[1].Trim(),
        Age    = arr[2].Trim()
    })
    .GroupBy(x => x.Number)
    .Where(g => g.Count() > 1);
foreach(var dupNumGroup in numDuplicates)
    Console.WriteLine("Number:{0} Names:{1} Ages:{2}"
        , dupNumGroup.Key
        , string.Join(",", dupNumGroup.Select(x => x.Name))
        , string.Join(",", dupNumGroup.Select(x => x.Age)));
<</div> div class="answers">

如果您正在寻找string.split解决方案,这里有一种非常简单的方法来完成您正在寻找的操作:

List<int> importedNumbers = new List<int>();
// Read our file in to an array of strings
var fileContents = System.IO.File.ReadAllLines(path);
// Iterate over the strings and split them in to their respective columns
foreach (string line in fileContents)
{
      var fields = line.Split(',');
      if (fields.Count() < 3)
          throw new Exception("We need at least 3 fields per line."); // You would REALLY do something else here...
      // You would probably want to be more careful about your int parsing... (use TryParse)
      var number = int.Parse(fields[0]);
      var name = fields[1];
      var age = int.Parse(fields[2]);
      // if we already imported this number, continue on to the next record
      if (importedNumbers.Contains(number))
          continue;  // You might also update the existing record at this point instead of just skipping...
      importedNumbers.Add(number); // Keep track of numbers we have imported
}