如何将多份.dat气象文件的各列数据分别存入独立数组?
拆分气象.dat文件列数据到11个独立数组的实现方案
嘿,你已经搞定了文件读取和预览的基础工作,接下来要把每一列数据分别存入11个独立数组的需求,咱们可以这样来实现:
核心思路
因为所有.dat文件结构一致,每一行都包含11列数据,所以我们可以先用List来临时存储每列数据(List比数组更灵活,方便动态添加元素),等所有文件处理完成后,再把List转换成数组即可。
完整代码实现
using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; // 初始化11个List用于存储每一列的数据,根据实际数据类型调整(比如double/int) List<string> column1 = new List<string>(); List<string> column2 = new List<string>(); List<string> column3 = new List<string>(); List<string> column4 = new List<string>(); List<string> column5 = new List<string>(); List<string> column6 = new List<string>(); List<string> column7 = new List<string>(); List<string> column8 = new List<string>(); List<string> column9 = new List<string>(); List<string> column10 = new List<string>(); List<string> column11 = new List<string>(); // 遍历C:\Meteo目录下所有.dat文件 foreach (string file in Directory.EnumerateFiles(@"C:\Meteo", "*.dat")) { // 逐行读取当前文件 foreach (string line in File.ReadLines(file)) { // 跳过空行(可选,根据你的文件实际情况决定是否保留) if (string.IsNullOrWhiteSpace(line)) continue; // 拆分当前行的列数据,这里假设列之间用空格分隔 // 如果你的文件用制表符、逗号等分隔,修改Split的参数即可,比如Split('\t')或Split(',') string[] rowColumns = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // 检查拆分后的列数是否为11,避免索引越界错误 if (rowColumns.Length == 11) { // 将每一列的数据添加到对应的List中 column1.Add(rowColumns[0]); column2.Add(rowColumns[1]); column3.Add(rowColumns[2]); column4.Add(rowColumns[3]); column5.Add(rowColumns[4]); column6.Add(rowColumns[5]); column7.Add(rowColumns[6]); column8.Add(rowColumns[7]); column9.Add(rowColumns[8]); column10.Add(rowColumns[9]); column11.Add(rowColumns[10]); } else { // 可选:处理格式异常的行,这里用弹窗提示,也可以改成日志记录 MessageBox.Show($"文件 {Path.GetFileName(file)} 中出现格式错误的行:{line}", "数据格式异常"); } } } // 将List转换为数组(如果业务需要数组类型的话) string[] arrColumn1 = column1.ToArray(); string[] arrColumn2 = column2.ToArray(); string[] arrColumn3 = column3.ToArray(); string[] arrColumn4 = column4.ToArray(); string[] arrColumn5 = column5.ToArray(); string[] arrColumn6 = column6.ToArray(); string[] arrColumn7 = column7.ToArray(); string[] arrColumn8 = column8.ToArray(); string[] arrColumn9 = column9.ToArray(); string[] arrColumn10 = column10.ToArray(); string[] arrColumn11 = column11.ToArray(); // 测试:可以弹窗预览某一列的第一个元素,验证是否正确 // MessageBox.Show($"第一列第一个数据:{arrColumn1[0]}");
关键注意事项
- 分隔符适配:一定要根据你的.dat文件实际列分隔符修改
Split方法的参数,比如是制表符就用Split('\t'),是逗号就用Split(',')。 - 数据类型转换:如果气象数据是数值类型(比如温度、气压等数字),建议把
List<string>改成List<double>或List<int>,并在添加时做类型转换,比如column1.Add(Convert.ToDouble(rowColumns[0])),这样后续计算更方便。 - 异常处理:代码中加入了列数检查,避免因文件格式错误导致程序崩溃,你可以根据需求调整异常处理逻辑(比如写入日志而不是弹窗)。
- 性能优化:如果文件数量多、数据量大,
File.ReadLines已经是逐行读取,不会一次性加载整个文件到内存,性能表现不错,无需额外优化。
内容的提问来源于stack exchange,提问作者Ben Johnson
相关产品推荐
相关产品推荐

