csvread 在 MATLAB 中删除行
csvread drops rows in MATLAB
我在 5 列中创建了一些随机数据并将其存储为 CSV 文件。这很好用,我的 CSV 实际上包含 1001 行; header 我的数据(我通过在我的电子表格编辑器中打开它来检查它)。但是,当我再次使用 csvread
在 MATLAB 中读取它时,如果我没有指定分隔符,我会收到错误消息,而当我指定分隔符时,data
仅包含 957 行,因此 header 并且缺少前 42 行。这是怎么回事?
代码:
A = rand(1e3,5);
out = fopen('output.csv','w');
fprintf(out,['ColumnA', ',', 'ColumnB', ',', 'ColumnC', ',', 'ColumnD', ',', 'ColumnE','\n']);
fclose(out);
dlmwrite('output.csv', A, 'delimiter',',','-append');
data = csvread('output.csv',',');
错误:
Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 1u) ==> ColumnA,ColumnB,ColumnC,ColumnD,ColumnE\n
Error in csvread (line 48)
m=dlmread(filename, ',', r, c);
我是不是在写入或读取文件时遗漏了一些愚蠢的东西?
我是 运行 64 位 Windows 7 机器上的 MATLAB R2012a。 (虽然我希望在下个月升级到 R2015b)
原因是您使用了无效的 csvread
语法。来自 help csvread
:
M = csvread('FILENAME') reads a comma separated value formatted file
FILENAME. The result is returned in M. The file can only contain
numeric values.
M = csvread('FILENAME',R,C) reads data from the comma separated value
formatted file starting at row R and column C. R and C are zero-
based so that R=0 and C=0 specifies the first value in the file.
M = csvread('FILENAME',R,C,RNG) reads only the range specified
by RNG = [R1 C1 R2 C2] where (R1,C1) is the upper-left corner of
the data to be read and (R2,C2) is the lower-right corner. RNG
can also be specified using spreadsheet notation as in RNG = 'A1..B7'.
你不能告诉csvread
使用什么分隔符。当你这样称呼它时,它会将 '
解释为数字 44(在 ascii 中)并将其用作起始行。
改为这样称呼:data = csvread('output.csv',1);
首先,在 MATLAB 2014b 上,我有一个不同的错误
Error using dlmread (line 138)
HeaderLines must be integer-valued.
Error in csvread (line 47)
m=dlmread(filename, ',', r, c);
在MATLAB中,我一般都是通过它的数据导入接口导入数据。在 Home
选项卡上,单击 Import Data
,那里有许多选项可确保数据导入正确。界面最好的部分是代码生成功能。您可以选择生成 MATLAB 实际用于导入数据的代码。例如,这是我得到的:
filename = 'output.csv';
delimiter = ',';
startRow = 2;
formatSpec = '%f%f%f%f%f%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines', startRow-1, 'ReturnOnError', false);
fclose(fileID);
ColumnA = dataArray{:, 1};
ColumnB = dataArray{:, 2};
ColumnC = dataArray{:, 3};
ColumnD = dataArray{:, 4};
ColumnE = dataArray{:, 5};
clearvars filename delimiter startRow formatSpec fileID dataArray ans;
它工作正常。如您所见,您可以轻松修改代码以根据您的需要定制导入功能。
我在 5 列中创建了一些随机数据并将其存储为 CSV 文件。这很好用,我的 CSV 实际上包含 1001 行; header 我的数据(我通过在我的电子表格编辑器中打开它来检查它)。但是,当我再次使用 csvread
在 MATLAB 中读取它时,如果我没有指定分隔符,我会收到错误消息,而当我指定分隔符时,data
仅包含 957 行,因此 header 并且缺少前 42 行。这是怎么回事?
代码:
A = rand(1e3,5);
out = fopen('output.csv','w');
fprintf(out,['ColumnA', ',', 'ColumnB', ',', 'ColumnC', ',', 'ColumnD', ',', 'ColumnE','\n']);
fclose(out);
dlmwrite('output.csv', A, 'delimiter',',','-append');
data = csvread('output.csv',',');
错误:
Error using dlmread (line 139) Mismatch between file and format string. Trouble reading number from file (row 1u, field 1u) ==> ColumnA,ColumnB,ColumnC,ColumnD,ColumnE\n
Error in csvread (line 48) m=dlmread(filename, ',', r, c);
我是不是在写入或读取文件时遗漏了一些愚蠢的东西?
我是 运行 64 位 Windows 7 机器上的 MATLAB R2012a。 (虽然我希望在下个月升级到 R2015b)
原因是您使用了无效的 csvread
语法。来自 help csvread
:
M = csvread('FILENAME') reads a comma separated value formatted file FILENAME. The result is returned in M. The file can only contain numeric values.
M = csvread('FILENAME',R,C) reads data from the comma separated value formatted file starting at row R and column C. R and C are zero- based so that R=0 and C=0 specifies the first value in the file.
M = csvread('FILENAME',R,C,RNG) reads only the range specified by RNG = [R1 C1 R2 C2] where (R1,C1) is the upper-left corner of the data to be read and (R2,C2) is the lower-right corner. RNG can also be specified using spreadsheet notation as in RNG = 'A1..B7'.
你不能告诉csvread
使用什么分隔符。当你这样称呼它时,它会将 '
解释为数字 44(在 ascii 中)并将其用作起始行。
改为这样称呼:data = csvread('output.csv',1);
首先,在 MATLAB 2014b 上,我有一个不同的错误
Error using dlmread (line 138) HeaderLines must be integer-valued. Error in csvread (line 47) m=dlmread(filename, ',', r, c);
在MATLAB中,我一般都是通过它的数据导入接口导入数据。在 Home
选项卡上,单击 Import Data
,那里有许多选项可确保数据导入正确。界面最好的部分是代码生成功能。您可以选择生成 MATLAB 实际用于导入数据的代码。例如,这是我得到的:
filename = 'output.csv';
delimiter = ',';
startRow = 2;
formatSpec = '%f%f%f%f%f%[^\n\r]';
fileID = fopen(filename,'r');
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'HeaderLines', startRow-1, 'ReturnOnError', false);
fclose(fileID);
ColumnA = dataArray{:, 1};
ColumnB = dataArray{:, 2};
ColumnC = dataArray{:, 3};
ColumnD = dataArray{:, 4};
ColumnE = dataArray{:, 5};
clearvars filename delimiter startRow formatSpec fileID dataArray ans;
它工作正常。如您所见,您可以轻松修改代码以根据您的需要定制导入功能。