为什么 textscan 不读取所有行 matlab

why textscan does not read all rows matlab

我有一个包含 5 列的文本文件。这是示例数据:

book   1  3  5  7
paper  3  9  0  2
pen    3  1  2  0
pencil 9  0  3  9

第一列包含字符,其他列只是数字。该文件包含多行。我正在尝试按如下方式阅读该 .txt;

fileID = fopen('filename.txt');
C = textscan(fileID,'%s %n %n %n %n');
fclose(fileID);
celldisp(C)

它正确读取了该列。但是,它只读取第一行,而不是全部。为什么会这样?如果我想读取所有行和所有列怎么办。谢谢

我假设您想创建一个元胞数组,其中每个元胞都包含文本文件中的单个元素。
您目前提供的代码是正确的:

fileID = fopen('filename.txt');
C = textscan(fileID,'%s %n %n %n %n');
fclose(fileID);

但是现在 C 中的每个单元格都包含您的 txt 文件中的一整列:
其中 C{1,1} 包含第一列,即四个字符串(book、paper、pen、pencil)。

现在是使用这段代码“展开”此类单元格的时候了:

for i=1:size(C,2)
    if(iscell(C{:,i}))
        A(:,i)=reshape(C{:,i},length(C{:,i}),1);
    else
        A(:,i)=num2cell(reshape(C{:,i},length(C{:,i}),1));
    end
end

基本上是说“如果单元格包含一个单元格(请参阅 C{1,1}),只需将其内容解包到 length(C{:,i}) 个不同的单元格中。相反,如果单元格包含一个数组,请分配此数组的每个元素数组到不同的单元格。”。
现在元胞数组 A 的形式为

我希望这就是您要找的。