尝试读取txt文件,然后循环遍历txt文件的所有字符串。不幸的是没有让它发挥作用。
fid = fopen(fullfile(source_dir, '1.txt'),'r')
read_current_item_cells = textscan(fid,'%s')
read_current_item = cell2mat(read_current_item_cells);
for i=1:length(read_current_item)
current_stock = read_current_item(i,1);
current_url = sprintf('http:/www.', current_item)
.....
我基本上尝试将单元格数组转换为矩阵,因为textscan输出单元格数组。但是现在我收到了消息
使用cell2mat时出错(第53行)不支持包含单元格数组或对象的单元格数组。
非常感谢任何帮助
答案 0 :(得分:3)
这是textscan
的正常行为。它返回一个单元数组,其中每个元素都是另一个单元格OR数组(取决于说明符),其中包含与传递给函数的格式字符串中的每个格式说明符对应的值。例如,如果1.txt
包含
appl 12
msft 23
运行代码返回
>> read_current_item_cells
read_current_item_cells =
{4x1 cell}
>> read_current_item_cells{1}
ans =
'appl'
'12'
'msft'
'23'
本身就是另一个单元格数组:
>> iscell(read_current_item_cells{1})
ans =
1
可以使用
访问其元素>> read_current_item_cells{1}{1}
ans =
appl
现在,如果您将格式从'%s'
更改为'%s %d'
,则
>> read_current_item_cells
read_current_item_cells =
{2x1 cell} [2x1 int32]
>> read_current_item_cells{1}
ans =
'appl'
'msft'
>> read_current_item_cells{2}
ans =
12
23
但有趣的是
>> iscell(read_current_item_cells{1})
ans =
1
>> iscell(read_current_item_cells{2})
ans =
0
这意味着对应于%s
的单元元素被转换为单元格数组,而对应于%d
的单元格元素被保留为数组。既然我不知道文件中行的确切格式,我猜你有一个单元格数组,其中一个元素又是包含表格中所有元素的另一个单元格数组。
答案 1 :(得分:2)
可能发生的是,数据被包装到单元格数组的单元格数组中,并且要访问存储的字符串,需要使用
来索引第一个数组read_current_item_cells = read_current_item_cells{1};
如果您的字符串长度不相等,则从cell2mat
转换将无效,在这种情况下您可以使用strvcat
:
read_current_item = strvcat(read_current_item_cells{:});
然后你应该能够遍历char
数组:
for ii=1:size(read_current_item,1)
current_stock = read_current_item(ii,:);
current_url = sprintf('http:/www.', current_stock)
.....