2014-01-31 4 views
0

У меня есть строки из текстового файла:Копирование текста из строки, которая соответствует определенному условию MATLAB

20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`[email protected],0*5E 

20130806_083643032,!AIVDM,2,1,4,B,E>jN6<[email protected]@LtP0000:uoH?9Ur,0*50 

мне нужно пройти через символы и извлечь дату в начале, то сообщение, которое начинается после того, как B, (но также может быть A,) до ,0

Любые мысли?

ответ

0

Хорошо, есть гораздо более элегантные способы решения этой проблемы, но мой следующий пример даст вам представление о том, как манипулировать строками в MatLab (с чем может возникнуть проблема, с которой вы столкнулись). Здесь вы идете:

String='20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`[email protected],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`[email protected],0*5E 


String2 = 

B,13aFeA0 

Просто поиграйте со строкой индексации и strcmp или strcmpi, и вы получите ощущение и иметь возможность писать гораздо приятнее выражения.

Теперь попробуйте извлечь дату самостоятельно!

Надеюсь, что это поможет!

0

Без петель вы могли бы сделать что-то вроде этого:

startString = ['20130806_083642832,!AIVDM,1,1,,B,13aFeA0P00PEqQNNC4Um7Ow`[email protected],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 
Смежные вопросы

 Смежные вопросы