Scilab循环使用execstr与csvRead读取文件报错及语言设置问题
问题1:代码报错解决
报错原因分析
你遇到的报错是因为execstr拼接的命令存在语法问题:
- 原代码中
string("StepPo135.txt")会生成包含双引号的字符串(例如"StepPo135.txt"),导致execstr执行的命令出现字符串嵌套引号的语法错误; ls('*.txt','r')返回的文件名可能带有末尾空格,也会导致文件名解析异常。
修正后的代码
方法1:用文件名作为变量名(修正execstr语法)
datfiles = ls('*.txt', 'r'); // 移除文件名末尾的无效空格 datfiles = strip(datfiles, 'right'); for i = 1:size(datfiles, 1) filename = datfiles(i, :); // 提取不含后缀的文件名作为变量名 var_name = strtok(filename, '.'); // 用单引号包裹文件名,避免双引号嵌套的语法问题 execstr(var_name + ' = csvRead(''' + filename + ''', ascii(9), [], ''string'')'); end
方法2:用结构体存储(更安全推荐)
避免execstr的潜在语法风险,用结构体统一管理所有读取的数据:
data_store = struct(); datfiles = ls('*.txt', 'r'); datfiles = strip(datfiles, 'right'); for i = 1:size(datfiles, 1) filename = datfiles(i, :); var_name = strtok(filename, '.'); // 将数据存入结构体的对应字段 data_store.(var_name) = csvRead(filename, ascii(9), [], 'string'); end
问题2:Scilab报错语言强制改为英文
即使偏好设置为英文仍显示德语报错,可通过以下方式解决:
- 修改配置文件:
- 关闭Scilab;
- 找到Scilab的配置文件:
- Windows:
%APPDATA%\Scilab\scilab.ini - Linux/macOS:
~/.Scilab/scilab.ini
- Windows:
- 在文件中添加一行:
language=en_US,保存后重启Scilab;
- 命令行启动参数:
启动Scilab时添加参数强制指定语言:scilab -l en_US - 系统区域设置(Windows):
进入「控制面板→区域→管理→非Unicode程序的语言」,设置为「英语(美国)」,重启系统后生效。
内容的提问来源于stack exchange,提问作者Kwas Poser
相关产品推荐
相关产品推荐

