从文本文件中读取字符串并使用字符串for循环

时间:2013-08-13 17:13:59

标签: matlab loops

尝试读取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行)不支持包含单元格数组或对象的单元格数组。

非常感谢任何帮助

2 个答案:

答案 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)
 .....