如何使文本能够健壮地对抗不匹配的行?

1次查看(最近30天)
琼·巴斯克斯
琼·巴斯克斯 2021年4月8日
评论道: 斯蒂芬。 2021年4月9日
我的文件中有我想要解析的行,最好是用textscan。在这些行之间,可能有一些行要跳过(不可预测的格式和数量,但肯定是新的行)。最好的处理方法是什么?
例如,对于附件中的数据,它将在第4行之后停止输出#HELLOMATHWORKS消息。
fid = fopen (“data.txt”);
= textscan (fid,“# HELLOMATHWORKS, % ^,, % n ');
文件关闭(fid);
这是一个大型代码库的MWE。

接受的答案

斯蒂芬。
斯蒂芬。 2021年4月8日
编辑:斯蒂芬。 2021年4月9日
str = fileread (“data.txt”);
tkn = regexp (str,“# HELLOMATHWORKS ,([^,]+),(\ 年代+)“令牌”);
tkn = vertcat (tkn {:})
tkn =6×2单元阵列
{“COM1”}{‘2146’}{“COM1”}{2147”}{“COM1”}{2148”}{“COM1”}{2149”}{“COM1”}{2150”}{“COM1”}{2151 '}
vec = str2double (tkn (:, 2))
vec = 6×1
2146 2147 2148 2149 2150 2151
2的评论
斯蒂芬。
斯蒂芬。 2021年4月9日
@Joan Vazquez:我认为#HELLOMATHWORKS的文本不是你文件里的内容。如果实际文本包含文件中其他地方不存在的唯一字符,则可以利用 LineEnding / EndOfLine 选项来实现读取文件数据的目的使用 textscan

登录评论。

答案(1)

琼·巴斯克斯
琼·巴斯克斯 2021年4月8日
这是有效的,但它似乎不是最好的解决方案…理想情况下,我会告诉短信可以“跳过所有内容,直到新行以#HELLOMATHWORKS开始”。
filetext = fileread (“data.txt”);
expr =“[^ \ n] * # HELLOMATHWORKS [^ \ n] *’
%查找并返回包含文本'#HELLOMATHWORKS'的所有行。
= regexp匹配(expr filetext,“匹配”);
%设置为1xN字符来输入文本扫描
goodlines = sprintf (“% s \ n”,{:}匹配);
tmp = textscan (goodlines,“# HELLOMATHWORKS, % ^,, % n ');

标签

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!