2013-07-05 3 views
0

У меня есть строка символов, называемая name. Третий символ в name это письмо, которое указывает на то, какой месяц name связан с, по следующей схеме:Альтернатива if elseif в Matlab

Jan F 
Feb G 
Mar H 
Abr J 
May K 
Jun M 
Jul N 
Aug Q 
Sep U 
Oct V 
Nov X 
Dec Z 

Я хочу, чтобы переименовать файлы, которые name идентифицирует, так что вместо произвольной системы письма, я используйте номера:

01 
02 
... 
12 

Чтобы сделать это я, если/ElseIf следующим образом:

if name(3) == 'F'      
      monthdesignator = '01'; 
     elseif name(3) == 'G' 
      monthdesignator = '02'; 
     elseif name(3) == 'H' 
      monthdesignator = '03'; 
     elseif name(3) == 'J' 
      monthdesignator = '04'; 
     elseif name(3) == 'K' 
      monthdesignator = '05'; 
     elseif name(3) == 'M' 
      monthdesignator = '06'; 
     elseif name(3) == 'N' 
      monthdesignator = '07'; 
     elseif name(3) == 'Q' 
      monthdesignator = '08'; 
     elseif name(3) == 'U' 
      monthdesignator = '09'; 
     elseif name(3) == 'V' 
      monthdesignator = '10'; 
     elseif name(3) == 'X' 
      monthdesignator = '11'; 
     else 
      monthdesignator = '12'; 
     end 

newfilename=strcat('C:\TickDataMinuteBars\MinuteBarsCsv\',name(1),name(2),'20',name(4),name(5),monthdesignator,'.csv'); 

, но это настолько громоздко и повторяемо. Есть ли более элегантный способ сделать это?

ответ

6

Вариант 1: Используйте hashmap (этот вариант является самым быстрым и самым кратким):

% Define your table once. 
keys = {'F','G','H','J','K','M','N','Q','U','V','X','W'}; 
values = {'01','02','03','04','05','06','07','08','09','10','11','12'}; 
lookup = containers.Map(keys,values,'UniformValues', true); 

% Lookups run in constant O(1) time. 
month = lookup(name(3)); 

Вариант 2: Использование case statements, что немного лучше, чем if/else :

switch name(3) 
    case 'F', month = '01'; 
    case 'G', month = '02'; 
    case 'H', month = '03'; 
    ... 
    otherwise, month = '12'; 
end 
1

На самом деле в MATLAB имеется шкафчик с переключателем. Вы можете прочитать об этом here