我正在尝试从包含任何顺序的某些关键字的文件名中解析一些数据。例如,文件名可以称为paidYes_cashYes_cardNo_billsYes_coinsNo_112916.csv
我想分配每个参数(付费,现金,卡,账单,硬币)是或否,以便我可以使用strcat
命令重建文件名。在提供我的文件名的情况下,所需的变量将如下所示:
paid = 'paidYes';
cash = 'cashYes';
card = 'cardNo';
bills = 'billsYes';
coins = 'coinsNo';
tail = '112916.csv';
到目前为止,我已经创建了一个脚本,它将保存包含'Yes'的所有变量,但是当我运行脚本/调试模式时,与在控制台中手动测试相比,我得不到一致的结果。
>> edit cashname
filename = 'paidYes_cashYes_cardNo_billsYes_coinsYes_112916.csv';
namearray = strsplit(filename,'_'); % Splits string into a 1x6 cell
i = 1;
for n = namearray{i} % 'Yes' containing variables only!
if strfind(n,'paidYes') > 0
paid = 'paidYes';
elseif strfind(n,'cashYes') > 0
cash = 'cashYes';
elseif strfind(n,'cardYes') > 0
card = 'cardYes';
elseif strfind(n,'billsYes') > 0
bills = 'billsYes';
elseif strfind(n,'coinsYes') > 0
coins = 'coinsYes';
end
i = i + 1
end
当我执行脚本时,我发现n
被分配了字符串的第一个字母! n
和i
的结果如果未被抑制则低于以下结果:
>> cashname
n = p
i = 2
n = a
i = 3
n = i
i = 4
n = d
i = 5
n = Y
i = 6
n = e
i = 7
n = s
i = 8
但是,当我在调试模式或控制台中输入命令时,我会输出完整的字符串:
>> length(namearray)
ans = 6
>> i = 2;
>> n = namearray{i}
n =
cashYes
我是否发现了某种错误,我在语法错误方面做了什么,我该如何解决?
感谢您的帮助
答案 0 :(得分:0)
namearray
的每个元素都包含分隔数据作为char
数组。当你写作时,
i = 1;
for n = namearray{i}
MATLAB将其解释为
for n = 'paidYes'
并且因为" for
语句会覆盖对循环中的索引所做的任何更改" [src],索引n
将在char
数组的元素上运行,这是期望和看到的。
除了使用switch
声明以外,我建议的两个备选方案是直接迭代namearray
的元素
for n = namearray
switch n{1}
case 'paidYes'
paid = 'paidYes';
case 'cashYes'
cash = 'cashYes';
case 'cardYes'
card = 'cardYes';
case 'billsYes'
bills = 'billsYes';
case 'coinsYes'
coins = 'coinsYes';
end
end
或使用整数for
- 循环索引来访问namearray
元素
for n = 1:length(namearray)
switch namearray{k}
case 'paidYes'
paid = 'paidYes';
case 'cashYes'
cash = 'cashYes';
case 'cardYes'
card = 'cardYes';
case 'billsYes'
bills = 'billsYes';
case 'coinsYes'
coins = 'coinsYes';
end
end