我有一个来自文本文件的字符串:
20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`2@O2,0*5E
20130806_083643032,!AIVDM,2,1,4,B,E>jN6<0W6@1WPab3bPa2@LtP0000:uoH?9Ur,0*50
我需要浏览字符并在开头提取日期然后在B,
之后开始的消息(但也可能是A,
)直到,0
有什么想法吗?
答案 0 :(得分:0)
好的,有更多优雅的方法可以解决这个问题,但是下面的例子将让您了解如何在MatLab中操作字符串(这可能是您遇到问题的方法)。你走了:
String='20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`2@O2,0*5E'
for i=1:length(String)
if(strcmp(String(i),'B')) %or strcmp(String(i),'A')
for j=i:length(String) %or "for j=length(String):i" if you meant the last 0 ;)
if(strcmp(String(j),'0'))
String2=String(i:j)
break
end
end
break
end
end
输出
String =
20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`2@O2,0*5E
String2 =
B,13aFeA0
只需使用字符串索引以及strcmp
或strcmpi
,您就会有一种感觉,并且能够编写更好的表达式。
现在尝试自己提取日期!
希望有所帮助!
答案 1 :(得分:0)
没有循环你可以这样做:
startString = ['20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`2@O2,0*5E'];
startPosition = find(startString == 'B') + 1;
if ~startPosition
startPosition = find(startString == 'A') + 1;
end
tmpMessage = startString(startPosition:end);
endPosition = find(tmpMessage == '0') - 1;
outMessage = tmpMessage(1:endPosition(1))
dateString = startString(1:8)
这给出了输出:
outMessage = ,13aFeA
dateString = 20130806