Update
С новым входом образца я не могу подтвердить, что ни один из встроенных методов работы желательно. Вот решение с помощью textscan
и reshape
:
fid = fopen('ex1.csv');
inputMatrix = textscan(fid, '%s', 'delimiter', ',');
fclose(fid);
inputMatrix = reshape(a{1}, 3, [])'; %'//assuming 3 columns in file
>> inputMatrix
'A' 'B' 'C'
'1' '1' '1'
'2' '2' [1x2 char] %//the 2nd char is "\r"
'3' '3' [1x2 char]
Кроме того, я обычно просто вернуться к старомодному способу чтения файлов, когда удобные функции не работают:
fid = fopen('ex1.csv');
inputMatrix = {};
while ~feof(fid)
line = fgetl(fid);
inputMatrix(end+1,:) = strsplit(line, ',');
end
fclose(fid);
>> inputMatrix
inputMatrix =
'A' 'B' 'C'
'1' '1' '1'
'2' '2' '2'
'3' '3' '3'
Обратите внимание, что это имеет преимущество не заботясь о том, сколько столбцов есть, и оно также не включает \r
.
В любом случае вы, вероятно, хотите, чтобы числа были числовой матрицей, а не матрицей ячеек строк. Простой вызов str2double
будет делать это для вас (и это будет разумно игнорировать любые \r
):
str2double(inputMatrix(2:end,:))
Предыдущая
Без файла примера я могу только сделать предложения на основе простого ввода Я создал локально, и мне кажется, что работают как importdata
, так и load
, в зависимости от того, как структурированы ваши входные данные.
Пример входных данных 1:
>> fid = fopen('ex1.csv', 'w');
>> fprintf(fid, '1,1,1\n');
>> fprintf(fid, '2,2,2\r\n');
>> fprintf(fid, '3,3,3\n');
>> fclose(fid);
>> a = importdata('ex1.csv')
ans =
1 1 1
2 2 2
3 3 3
>> a = load('ex1.csv')
ans =
1 1 1
2 2 2
3 3 3
Пример входных данных 2:
>> fid = fopen('ex2.csv', 'w');
>> fprintf(fid, '1,1,1\n');
>> fprintf(fid, '2,2,2\r\n');
>> fprintf(fid, '3,3\n');
>> fclose(fid);
>> a = importdata('ex2.csv')
ans =
1 1 1
2 2 2
3 3 NaN
>> a = load('ex2.csv')
Error using load
Number of columns on line 3 of ASCII file ex2.csv must be the same as previous lines.
Если только заголовок является проблематичным, то вы можете поместить '% 'в начале строки. Затем MATLAB будет рассматривать это как комментарий, и 'load' будет работать. –
@JeffIrwin Кроме того, просто откройте файл в редакторе Matlab и сохраните его; он автоматически преобразуется в правильный EOL (по крайней мере, в Windows). – Setsu