我有一个文件Text.txt,其中包含以下指定的内容:
!typ truck,bus,car,motor,bicycle
!end typ
!allowed car,motor,bicycle
!end allowed
我希望从“!允许的汽车,电机,自行车”这一行得到“汽车,电机,自行车”字符串。所以我在MATLAB 2012b中做了这些:
io_contents = fullfile( 'Text.txt'); % open Textfile
Text = fileread( io_contents ); % read the content of io_contents
Rowbegin = strfind(Text,'!allowed'); %find the beginn of the row in Text
Rowend = strfind(Text,'!end allowed')-4 ; %find the end of the row in Text
Row = Text(Rowbegin:Rowend)
String = textscan(Row,'!allowed%s ');
String = String{1}{1}
它应该在Matlab 2012b中有效,但在matlab 2013b中它显示了这条消息:
Caught "std::exception" Exception message is: invalid string position
在第6行,TEXTSCAN使用的是。
你能告诉我原因,我怎么能解决它?功能文本的替代功能是否可以解决?非常感谢
答案 0 :(得分:1)
虽然我并不确信这与2013b版本有关,但这是另一种解决方案。
用此替换textscan
行:
strrep(Row,'!allowed ','')
如果你想做更高级的事情,你可以查看正则表达式,但是为了匹配字符串中的单词,这通常是最简单的方法。作为奖励,它也应该是相当有效的。
如果您不需要Row
的中间结果,也可以跳过一个步骤。
在这种情况下使用:
String = Text(Rowbegin+9:Rowend)