MATLAB在一串数字和下划线中搜索给定位置

时间:2018-03-28 08:12:52

标签: string matlab search

在我的日志中,试验编码如下:

12_120_20_120_1

试用类型的唯一指标是下划线之间的倒数第二个 我希望matlab在给定的位置搜索给定的数字。
我尝试将其编码为'star_star_star_120_star' 但它不起作用。

事实上,当我使用以下代码时,查找带有'* *'的字符串对我来说根本不起作用:

if length (strfind (logs{nl,4}, '9_220_20_120_2'))>0

(以上代码有效,它没有星星,它只会找到一个试验,我希望它能找到120个位置的所有试验star_star_star_120_star)

我不能只在字符串中搜索120,

[if length (strfind (logs{nl,4}, '120'))>0]

因为它也会出现在该列中可能的字符串的不同位置,所以它也会返回我不想要的内容 (例如'9_120_20_160_2')。

('星'我的意思是星号,当我在这里输入时它消失了)

如果不清楚,我准备澄清。

这是我的典型日志的几行:

  

主题试验事件类型代码时间TTime不确定性持续时间不确定性ReqTime ReqDur Stim类型对索引

     

MROT_PILOT_09_03_M6 222图片INSTRUKACJA_PRT2 37667 0 1 111167 1 0其他0   MROT_PILOT_09_03_M6 222脉冲111 148743 111076 0
  MROT_PILOT_09_03_M6 223图片PRZERWA 148834 0 1 100167 1 0其他0   MROT_PILOT_09_03_M6 223脉冲111 173703 24868 0
  MROT_PILOT_09_03_M6 223 Pulse 111 198743 49909 0
  MROT_PILOT_09_03_M6 223脉冲111 223702 74868 0
  MROT_PILOT_09_03_M6 223脉冲111 248663 99829 0
  MROT_PILOT_09_03_M6 224图片FIX 249002 0 1 10167 1 0其他0   MROT_PILOT_09_03_M6 225图片11_60_80_20_2 259168 0 1 50167 1 0 50000点击11   MROT_PILOT_09_03_M6 225 Pulse 111 273703 14534 0
  MROT_PILOT_09_03_M6 225回应2 292049 32880 1

(Idk如何更好地格式化,抱歉)

这是我的代码的重要部分:

MRIpulse= find (strcmp (logs (:,3) , 'Pulse'));
firstMRIpulse =MRIpulse(1)

for nl = firstMRIpulse:length (logs (:,1))

 %HARD2   

if length (strfind (logs{nl,4}, '9_220_20_160_2'))>0

    if length (strfind (logs {nl,12}, 'hit'))>0
         HARD2SCORE (end +1) = 1;
    else HARD2SCORE (end +1) = 0;

    for nextrow = nl+1:length (logs (:,1))
        if length (strfind (logs{nextrow,3}, 'Response'))>0
   HARD2RT(end +1) = str2num (logs{nextrow,6})
   break
        end 
    end
    end
end

2 个答案:

答案 0 :(得分:1)

我找到了这个问题的答案。我用以下方式修改了代码:

而不是:

if length (strfind (logs{nl,4}, '9_220_20_160_2'))>0

我有:

 if strfind (logs{nl,4},'_')
     ind=strfind(logs{nl,4},'_')

    if strcmp (logs{nl,4} (ind (3)+1:ind(4)-1), '40')>0 

所以基本上我在试用代码中为每个下划线创建索引(总是这样格式化:' number_number_number_number_number'),我在3号之间查找数字(实际上是正式的字符串)和第四个下划线。

我也将strfind更改为strcmp,例如如果我的试用名称为' 9_220_20_160_2',并且我使用了strfind,则结果对于' 160'和' 60'但是如果我使用strcmp,那么对于' 160'只(因此它使我的搜索更精确)。

其余代码保持不变。

如果有兴趣我可以进一步澄清这一点。

答案 1 :(得分:0)

我会使用strsplit。我发现它更容易理解,并且很容易更改您搜索的内容。

spst = strsplit(logs{n1,4}); % Assuming logs{n1,4} is that x_y_z_XXX_w
numBeforeLast = str2double(spst{4}); % Number before the last underscore - XXX you are searching for.
if (numBeforeLast == number_you_are_searching_for)
    % You found the case, do whatever you want with it.
end