从符合特定条件MATLAB的字符串中复制文本

时间:2014-01-31 13:03:13

标签: matlab text ais

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

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

有什么想法吗?

2 个答案:

答案 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

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

现在尝试自己提取日期!

希望有所帮助!

答案 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