我有一个来自文本文件的字符串:
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
有什么想法吗?
如果没有循环,您可以执行以下操作:
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
好的,有很多更优雅的方法可以解决这个问题,但是我下面的示例将让您了解如何在 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
or strcmpi
,您就会有一种感觉,并且能够编写更好的表达式。
现在尝试自己提取日期!
希望有帮助!