0

尝试读取 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 行)无法支持包含元胞​​数组或对象的元胞数组。

很感谢任何形式的帮助

4

2 回答 2

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则保留为数组。现在,由于我不知道文件中行的确切格式,我猜你有一个带有一个元素的元胞数组,而另一个元胞数组包含表中的所有元素。

于 2013-08-13T20:50:11.687 回答
2

可能发生的情况是数据被包装到单元数组的单元数组中,并且要访问存储的字符串,您需要使用索引超过第一个数组

read_current_item_cells = read_current_item_cells{1};

如果您的字符串长度不相等,则转换 fromcell2mat将不起作用,在这种情况下,您可以使用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)
 .....
于 2013-08-13T18:19:40.710 回答