0

我有一个名为name. 中的第三个字符name是一个字母,表示与哪个月份name相关联,根据以下方案:

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

为此,我以下列方式使用了 if/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');

但这是如此笨拙和重复。有没有更优雅的方法来做到这一点?

4

2 回答 2

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:例语句,略好于if/else

switch name(3)
  case 'F', month = '01';
  case 'G', month = '02';
  case 'H', month = '03';
  ...
  otherwise, month = '12';
end
于 2013-07-05T19:56:07.277 回答
1

事实上,matlab 有一个 switch-case 语句。你可以在这里阅读

于 2013-07-05T19:33:44.973 回答