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

Scilab读取CSV发动机日志列识别异常 无法提取各PID参数极值

解决方案

你遇到的CSV读取单列、数值全为NaN、Excel计算极值一致的问题,均为配置错误和基础语法错误导致,按以下步骤修复即可:

1. 修复基础语法错误

你初始代码中Data=csvRead("data",",",[],[],[],[],[],6)的写法完全错误:uigetfile返回的文件名存在变量data中,给data加双引号会让Scilab直接读取一个文件名为data的无后缀文件,根本不会加载你选中的日志。
修正文件选择逻辑:

// 弹出文件选择窗口,获取选中文件的完整路径
file_path = uigetfile(["*.csv"], "选择发动机日志CSV文件");

2. 确认CSV实际分隔符,禁止主观猜测

你先后用逗号、制表符(ascii(9)对应Tab键)作为分隔符均读取失败,核心原因是分隔符和文件实际格式不匹配:

  • 不要被.csv后缀误导,工业设备导出的CSV常使用分号;作为分隔符,部分场景会使用Tab或多空格分隔。
  • 验证方法:把CSV后缀改为.txt用记事本打开,直接观察同一行相邻两个数据之间的间隔字符,用该字符作为csvRead的分隔符参数即可。
  • 如果打开后文件开头出现乱码,是UTF-8 BOM编码格式不兼容,将文件另存为「UTF-8无BOM」或ANSI编码后再读取。

3. 正确配置csvRead读取参数

csvRead参数顺序不要随意传值,同时要实际核对需要跳过的表头行数:打开文件数清楚前6行是否全为非数据表头,确认第一行有效数据的起始位置。
正确读取代码参考(以逗号分隔、跳过前6行表头为例):

// 先以字符串格式读取全量内容,避免自动转数值失败直接返回NaN
raw_data = csvRead(
    file_path,  // 要读取的文件路径,变量不要加引号
    ",",        // 和实际匹配的分隔符
    ".",        // 数值的小数点符号,默认是点
    [],         // 字符串转义符,默认双引号
    [],         // 要跳过的特定行,无特殊需求留空
    "string",   // 先全部读为字符串,避免格式兼容问题
    6           // 跳过前6行表头,按实际行数修改
);
// 将字符串数组转换为数值数组,非数值内容自动转为NaN,后续计算时自动跳过
num_data = strtod(raw_data);
// 执行后查看维度,正常应返回「有效数据行数, 69」
disp(size(num_data));

如果实际分隔符为分号,把第二个参数改为";";如果为Tab分隔,改为ascii(9)即可。

4. 提取各PID参数的极值

数据正确读取后,直接调用内置函数按列计算即可,函数会自动跳过NaN值:

// 按列计算最小值、最大值,'r'代表按行维度聚合,返回每列的统计值
col_min = min(num_data, 'r');
col_max = max(num_data, 'r');
// 如果需要绑定PID参数名,单独读取表头中对应参数名的行做映射即可

5. Excel计算极值相同的修复方法

该问题是因为Excel默认把日志中的数值识别为文本格式,文本比较按字符编码顺序而非数值大小计算,导致结果异常。修复方法:选中所有数据列,点击顶部菜单栏「数据-分列」,直接点击完成,强制将文本转换为数值后,再计算MAX、MIN即可得到正确结果。

验证方法

你自制的测试文件读取失败也是分隔符不匹配导致:测试文件中用多空格分隔字段,但代码用Tab作为分隔符,自然识别为单列。可以先将测试文件的多空格统一替换为逗号,用上述代码读取,若能返回4行4列的数值矩阵,说明代码逻辑正确,再调整参数读取实际日志即可。


内容的提问来源于stack exchange,提问作者Ryan LaRue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:54:25