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

GNU Octave如何读取以;为分隔符、逗号为小数标记的Excel CSV文件

GNU Octave 读取分号分隔、逗号作小数标记CSV的无原文件修改方案

以下方法全程不会改动磁盘上的原始CSV文件,适配Excel区域配置默认生成的;字段分隔、,小数分隔格式:

  • 方法1:内存文本替换后解析(兼容所有Octave版本,无依赖)
    先将文件以纯文本形式读入内存,在内存中完成小数逗号到点号的替换,再按分号分隔解析数值,不会对原文件做任何写入操作。示例代码:
    % 读取文件全量文本
    fid = fopen("target_file.csv", "r", "native", "utf-8"); % 编码按实际文件调整,国内Excel常为gbk
    raw_content = fread(fid, Inf, "char=>char").';
    fclose(fid);
    
    % 内存内替换小数分隔符
    fixed_content = strrep(raw_content, ",", ".");
    
    % 按分号分隔解析数值,存在表头可添加"HeaderLines", 表头行数 参数
    parsed = textscan(fixed_content, "%f", "Delimiter", ";", "MultipleDelimsAsOne", true);
    col_num = 5; % 替换为CSV实际列数
    final_data = reshape(parsed{1}, col_num, []).';
    
  • 方法2:高版本Octave原生参数指定读取(Octave 6.0+支持)
    新版Octave的导入函数支持直接自定义分隔符规则,无需手动替换文本,一步完成读取:
    % 配置导入参数
    import_opt = detectImportOptions("target_file.csv");
    import_opt.Delimiter = ";";
    import_opt.DecimalSeparator = ",";
    % 纯数值数据用readmatrix,带文本表头/混合内容用readtable
    final_data = readmatrix("target_file.csv", import_opt);
    
  • 方法3:流管道读取(适合超大文件,避免全量读入内存)
    通过系统管道完成符号替换的流处理,直接将处理后的流传给读取函数,不会生成临时文件、不改动原文件。Linux/macOS环境可直接用自带sed工具,Windows环境可搭配PowerShell或sed移植版使用:
    % Linux/macOS 示例
    pipe_fid = popen("sed 's/,/./g' target_file.csv", "r");
    final_data = dlmread(pipe_fid, ";");
    pclose(pipe_fid);
    

注意:如果CSV包含带逗号/分号的文本字段、或存在千位分隔符,需要先针对文本字段加匹配规则避免误替换,纯数值导出场景下上述方法均可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:36:17