Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一种方法可以从多个文件中读取数据,并将每个文件的每一列保存在一个单独的数组中_C#_File_File Io - Fatal编程技术网

C# 是否有一种方法可以从多个文件中读取数据,并将每个文件的每一列保存在一个单独的数组中

C# 是否有一种方法可以从多个文件中读取数据,并将每个文件的每一列保存在一个单独的数组中,c#,file,file-io,C#,File,File Io,我读取每个文件的名称和详细信息,然后在MessageBox中预览它们以进行测试。 是否有办法将所有文件的每一列记录在一个单独的数组中 气象图 var pathFiles = Directory.EnumerateFiles(@"C:\Meteo", "*.dat"); List<string> lines = Directory.EnumerateFiles(@"C:\Meteo", "*.dat").SelectMany(file => Fil

我读取每个文件的名称和详细信息,然后在
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);
            }
        }
var-pathFiles=Directory.EnumerateFiles(@“C:\Meteo”,“*.dat”);
列表行=目录.EnumerateFiles(@“C:\Meteo”,“*.dat”)。选择多个(文件=>file.ReadLines(文件)).ToList();
//仅显示文件名。
//foreach(目录.EnumerateFiles(@“C:\Meteo”,“*.dat”)中的字符串文件)
//{
//MessageBox.Show(文件);
//}
foreach(目录.EnumerateFiles(@“C:\Meteo”,“*.dat”)中的字符串文件)
{
//读每一行
foreach(文件中的字符串行。ReadLines(文件))
{
//并在消息框中显示文件名和行
MessageBox.Show(行、文件);
}
}
我看到数据是可视化的,但我想把它们分成11个单独的数组

PIC(具有相同结构的。*dat文件太多):


首先,我们必须确定什么是柱分离器;似乎是表格或/和空间:

现在,我们来关注
数据

var result = Enumerable
  .Range(0, data.Any() ? data[0].Length : 11)
  .Select(column => data
     .Select(line => line[column])
     .ToArray())
  .ToArray();
因此,您将拥有
11个
数组(列)的数组:

但是,我怀疑您是否真的希望透视
数据
。我建议把每一行变成一个类,例如

然后,当您想要使用,比如说,
date
时,您可以将数组作为

 var dates = result
   .Select(item => item.date)
   .ToArray(); 
编辑:或者,如果您想在消息框中查看项目(例如,
date
id
)(请参见下面的注释),则只需查看
foreach

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

你是在处理CSV文件还是什么?*dat文件我会上传图片现在我看到消息框上的所有值,但我需要将每一列保存在单独的数组中?你有什么理由希望它们在单独的数组中,与其使用一个对象来保存一行广告的所有细节,还不如使用这些对象的单个列表/数组?我可以在代码中输入foreach吗?我想在消息中看到单独的数据box@Ben约翰逊:当然,您可以迭代
结果
并使用
消息框。以所需格式显示
(借助字符串插值)
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();
 var dates = result
   .Select(item => item.date)
   .ToArray(); 
 foreach (var item in result)) {
   MessageBox.Show($"{item.date} and {item.id}");
 }