有没有办法从多个文件中读取数据,每个文件的每一列都保存在一个单独的数组中
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();
编辑: 或者,如果您想在消息框中查看项目(例如,date
和 id
)(请参阅下面的评论)所有你需要的是 foreach
:
foreach (var item in result)) {
MessageBox.Show($"{item.date} and {item.id}");
}
我阅读了每个文件的名称和详细信息,然后在 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();
编辑: 或者,如果您想在消息框中查看项目(例如,date
和 id
)(请参阅下面的评论)所有你需要的是 foreach
:
foreach (var item in result)) {
MessageBox.Show($"{item.date} and {item.id}");
}