0

我有一个来自文本文件的字符串:

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

有什么想法吗?

4

2 回答 2

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
于 2014-01-31T14:29:33.860 回答
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

只需使用字符串索引和 strcmpor strcmpi,您就会有一种感觉,并且能够编写更好的表达式。

现在尝试自己提取日期!

希望有帮助!

于 2014-01-31T13:58:27.343 回答