MatLab:通过代码将文件作为单元数组打开为二维数组

时间:2019-01-04 18:30:55

标签: arrays matlab

我有一个旨在通过MatLab GUI使用的程序,需要通过命令行代码使用。我无法正确读取文件。该程序要求文件是二维格式的字符串单元格数组(即40x10的字符串数组)。使用MatLab GUI时,我只需使用“导入数据”突出显示40x10区域并作为单元格数组上传(文本选项:字符串数组;在工作区中显示为40x10单元格数组)。

通过代码:使用以下“ textscan” MatLab代码时: CellArray = textscan(FileName,'%s%s%s%s%s%s%s%s%s%s%s%s','Delimiter',',');

然后使用“ size”命令确定其尺寸([m,n] = size(Features)),好像它是作为1x10数组而不是40x10数组导入的。

如何按照我描述的方式通过代码(而不是通过GUI)将文件作为40x10单元格阵列上传?谢谢。

2 个答案:

答案 0 :(得分:1)

如果该文件是文本文件,其中每行包含10个用逗号分隔的字符串,则可以尝试使用fgetl读取每一行,并用split(line, ',')以逗号分隔,然后转换为单元格cellstr,最后将结果放在相应的行中。像这样:

features = cell(40,10);
fid=fopen('filename');
line="just a place keeper";
k = 1;
while ischar(line)
    line=fgetl(fid);
    features(k,:) = cellstr(split(line, ','))'; % Note the ' = transpose into a row
    k = k+1;
end
close(fid);

希望这会有所帮助

JAC

答案 1 :(得分:0)

使用MatLab的“ textscan”选项的“ CollectOutput”选项更正了

opt = {'CollectOutput',true};
fmt = '%s%s%s%s%s%s%s%s%s%s';
C = textscan(fid,fmt,opt{:});
C = C{1};