MATLAB使用textscan读取格式化文本时出现解析错误的问题
解决textscan解析时间格式的错误问题
你遇到的这个textscan解析错误,问题出在时间格式符的定义上,我帮你梳理下原因和修复方案:
问题根源
你写的时间格式是%{hh:mm:ss.SSS}T,这里的hh是MATLAB里12小时制的小时标识符,它要求文本里的时间必须附带AM/PM标识(比如08:15:30.456 AM)。但从你的错误提示和场景来看,你的文本时间应该是24小时制的(比如14:22:10.789),用hh就会导致解析失败。
修正后的代码
把时间格式里的hh改成24小时制对应的HH,修正后的代码如下:
filename = 'myFile.txt'; fid = fopen(filename); % 先判断文件是否成功打开,避免后续报错 if fid == -1 error('无法打开目标文件,请检查路径或文件权限'); end myData = textscan(fid, '%u64 %{dd/MM/yyyy}D %{HH:mm:ss.SSS}T %f64 %f64 %u64 %f64 %f64 %f64', 'HeaderLines', 3); fclose(fid);
额外排查建议
如果修改后还是报错,可以再检查这几点:
- 确认文本第4行(跳过3行表头后)的时间格式和
HH:mm:ss.SSS完全匹配,比如毫秒部分是不是三位数字、有没有多余的分隔符。 - 核对日期格式
dd/MM/yyyy是否和文本一致,比如会不会是MM/dd/yyyy的月在前格式,这是很容易搞混的点。 - 检查文件里的列分隔符是不是空格,如果是制表符或逗号,需要在
textscan里指定'Delimiter'参数。
内容的提问来源于stack exchange,提问作者IndustProg




