Matlab dlmread函数:指定仅考虑前4列的范围

时间:2014-04-30 12:38:15

标签: matlab matlab-guide matlab-deployment matlab-compiler

假设输入文件采用以下格式:

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]

2 个答案:

答案 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将它们转换为数组。