假设输入文件采用以下格式:
1,2,3,4,One
5,6,7,8,Two
9,10,11,12,Three
...
41,42,43,44,Eleven
目的是使用 dlmread 函数将前4列作为矩阵读取。从指南(即下面的查找网址),我已经成功地做到了这一点:
A = dlmread('myfile.txt',',',range)
应该指定范围变量,以便仅考虑前4列?
[指南:http://www.mathworks.co.uk/help/matlab/ref/dlmread.html]
答案 0 :(得分:0)
你看过textscan
了吗?这似乎更容易,因为使用dlmread
会要求您在加载文件之前找到行数。文档中的一个示例是关于跳过列:
fileID = fopen('scan1.dat');
dates = textscan(fileID,'%s %*[^\n]');
fclose(fileID);
为了解决您的问题,您可以这样做:
% //Open the file pointer
fileID = fopen('myfile.txt');
% //textscan uses a formatSpec (see link below)
% //so the above spec says to get a string and then
% //skip everything up to the newline character
% //So we can adapt this to yours like so:
A = textscan(fileID,'%d,%d,%d,%d, %*[^\n]');
% //Each %d is an integer number, separated by commas
% //and after the first four, ignore the rest of the line.
fclose(fileID);
formatSpec help:http://www.mathworks.com/help/matlab/ref/textscan.html#inputarg_formatSpec
您可能还需要查看'CollectOutput'
标志,因为它会将所有数据放入一个数组中。如果没有设置此标志,您将获得1x4单元阵列,每个元素包含一列数据。设置标志后,A
将是一个单元素单元格数组,其元素为4xnrows
数组。
这也解决了非数字字段的问题,因为textscan可以处理任何数据,并且会跳过那些符合格式规范的字段。
答案 1 :(得分:-1)
最简单的方法是使用readtable,它允许您导入不同的数据类型,然后使用该表,您可以选择数字字段并使用table2array将它们转换为数组。