You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多份.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:01:41