在我的日志中,试验编码如下:
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
答案 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