令牌是空时Textscan函数忽略了最后的分隔符
36视图(30天)
显示旧的评论
答案(2)
里克
2023年5月15日18:26
编辑:里克
2023年5月17日在7:04
据我所知,这是目标功能。它无法匹配一个空数组的格式规范,所以跳过。
如果你想要落后于空令牌,你可以考虑split()函数,或者正则表达式()与分裂的输出。
编辑:在这里你有例子我的意思。
str {1} =“a, b, c”;
str {2,} =“a, c”;
str {3 1} =“a, b,”;
正则表达式(str,”、“,“分裂”)%三个令牌
分割(str,”、“)
%显示您的解决方案工作
cellfun (@ (x) disp (textscan ([x”、“),“% q”,“分隔符”,”、“,“MultipleDelimsAsOne”,0)),str)
正如你所看到的,每个解决方案返回3令牌,但是都在一个稍微不同的格式。
4评论
里克
2023年5月16日17:50
这工作。
关于你的错误报告:因为当前行为匹配文档中的描述,我不知道这可以归类为一个错误。你可以称之为一个增强请求。
无论哪种方式,你的主要问题是解决。只是知道textscan将尝试阅读你的格式,不令牌。如果你想标记你需要类似的regexp。
沃尔特·罗伯森
2023年5月16日20:40
文件名= tempname () +. txt”;
str = {12453年,c '};
writeline (str,文件名);
fid = fopen(文件名,“r”);
datacell = textscan (fid检测器,“% % f”, 1“分隔符”,”、“,“MultipleDelimsAsOne”,0);
休息= char(从文件中读(fid,[1正],‘* uchar‘));
文件关闭(fid);
datacell
休息
这告诉我们什么呢?它告诉我们,textscan完成处理的格式后,检查输入流,使用空格和分隔符的第一个副本,然后停止。
在你的例子中在处理的a、b % q首先处理
一个
的% q格式,然后吃的分隔符,离开“b”的输入流。没有指定数再次尝试处理,读取
b
% q格式,吃分隔符。没有指定数再次尝试处理。输入流是空的,所以它停止。是的,这
是
同样的事情会发生的“a、b”的情况下,没有最后的分隔符。
潜在的替代将是如果分隔符的缓冲区,并处理跳过一个领先的分隔符。但在这种情况下输入,b, c的会一样对待b, c,我似乎不太可能,你会希望是这样。
是的,textscan
可以
设计内部设置一个标志,指示一个分隔符已经见过的当前位置,但我不确定,将与期望。例如,如果输入
123年,美国广播公司(abc), <换行符> 456,def,
和格式
% f %问
与当前的行为会产生{{123;456},{' abc ';“def”}}。如果落后于分隔符调用missing-contents行为(你的解释),那么这将意味着123年应该接受% f是第一次处理,然后
美国广播公司
应该接受% q是第一次处理,然后空字段的末尾行应该接受并变成了南第二次% f处理,然后呢
456年
应该接受和转化为特征向量处理第二次% q,然后呢
def
应该触发一个格式不匹配% f处理,第三次停止扫描和离开
def,
在缓冲区。它可能有一个一致的方式处理,但这是预期和有用的是什么?