有没有办法从多个文件中读取数据,每个文件的每一列都保存在一个单独的数组中

Is there a way to read data from many files, each column of each file to be saved in a separate array

我阅读了每个文件的名称和详细信息,然后在 MessageBox 中预览它们以进行测试。 有没有办法将所有文件的每一列记录在一个单独的数组中?

气象图

       var pathFiles = Directory.EnumerateFiles(@"C:\Meteo", "*.dat");

        List<string> lines = Directory.EnumerateFiles(@"C:\Meteo", "*.dat").SelectMany(file => File.ReadLines(file)).ToList();

        //Display only filenames.
        //foreach (string file in Directory.EnumerateFiles(@"C:\Meteo", "*.dat"))
        //{
        //    MessageBox.Show(file);
        //}

        foreach (string file in Directory.EnumerateFiles(@"C:\Meteo", "*.dat"))
        {
            // read each line
            foreach (string line in File.ReadLines(file))
            {
                // and show file name and line in a message box
                MessageBox.Show(line, file);
            }
        }

我看到正在可视化的数据,但我想将它们排序为 11 个单独的数组。

PIC(结构相同的.*dat文件过多):

首先,我们要确定什么是列分隔符;似乎是 tabulation 或 / and space:

var data = Directory
  .EnumerateFiles(@"C:\Meteo", "*.dat")
  .SelectMany(file => File.ReadLines(file))    
  .Select(line => line.Split(new char[] {'\t', ' '}, StringSplitOptions.RemoveEmptyEntries))
  .ToList();

现在是转向 data:

的时候了
var result = Enumerable
  .Range(0, data.Any() ? data[0].Length : 11)
  .Select(column => data
     .Select(line => line[column])
     .ToArray())
  .ToArray();

所以你会有 11 个数组(列):

string demo = result[1][3]; // 1st column - (dates), 3d record

但是,我怀疑您是否真的想调整 data。我建议将每一行变成 class,例如

var result = Directory
  .EnumerateFiles(@"C:\Meteo", "*.dat")
  .SelectMany(file => File.ReadLines(file))    
  .Select(line => line.Split(new char[] {'\t', ' '}, StringSplitOptions.RemoveEmptyEntries))
  .Select(items => new {
     id = items[0],
     date = DateTime.ParseExact(items[1], "dd-MM-yyyy", CultureInfo.InvariantCulture), 
     /* etc. */
   })
  .ToList();

然后当你想使用 date 时,你可以有一个数组作为

 var dates = result
   .Select(item => item.date)
   .ToArray(); 

编辑: 或者,如果您想在消息框中查看项目(例如,dateid)(请参阅下面的评论)所有你需要的是 foreach:

 foreach (var item in result)) {
   MessageBox.Show($"{item.date} and {item.id}");
 }