Подтвердить что ты не робот

Чтение файлов CSV с помощью MATLAB?

Я пытаюсь прочитать в .csv файле с MATLAB. Вот мой код:

csvread('out2.csv')

Вот что выглядит out2.csv:

03/09/2013 23:55:12,129.32,129.33
03/09/2013 23:55:52,129.32,129.33
03/09/2013 23:56:02,129.32,129.33

В окнах я могу без проблем прочитать этот точный файл с функцией xlsread. В настоящее время я на Linux-машине. Когда я впервые использовал xlsread для чтения файла, мне сказали: "Файл не в распознанном формате", поэтому я переключился на использование csvread. Однако, используя csvread, я получаю следующее сообщение об ошибке:

Error using dlmread (line 139)
Mismatch between file and format string.
Trouble reading number from file (row 1u, field 2u) ==> /09/2013
23:55:12,129.32,129.33\n

Error in csvread (line 48)
m=dlmread(filename, ',', r, c)

Я думаю, что "/" в дате вызывает проблему. В окнах 1-й столбец интерпретируется как строка. В linux он интерпретируется как число, поэтому он пытается прочитать число и терпеть неудачу в обратном слэше. По крайней мере, я думаю, что это происходит. Любая помощь будет действительно оценена.

4b9b3361

Ответ 1

csvread может читать только удвоения, поэтому он задыхается в поле даты. Используйте textscan.

fid = fopen('out2.csv');
out = textscan(fid,'%s%f%f','delimiter',',');
fclose(fid);

date = datevec(out{1});
col1 = out{2};
col2 = out{3};

Обновление (8/31/2017)

Поскольку это было записано еще в 2013 году, функция MATLAB textscan была обновлена ​​для непосредственного чтения дат и времени. Теперь код будет выглядеть так:

fid = fopen('out2.csv');
out = textscan(fid, '%{MM/dd/uu HH:mm:ss}D%f%f', 'delimiter', ',');
fclose(fid)

[date, col1, col2] = deal(out{:});

Альтернативой, упомянутой ниже @Victor Hugo (и в настоящее время моей личной идеей для этого типа ситуации), было бы использовать readtable, который примет ту же строку форматирования, что и textscan, но собирает результаты непосредственно в объект таблицы:

dataTable = readtable('out2.csv', 'Format', '%{MM/dd/uu HH:mm:ss}D%f%f')
dataTable.Properties.VariableNames = {'date', 'col1', 'col2'};

dataTable =

  3×3 table

           date             col1      col2 
    ___________________    ______    ______

    03/09/2013 23:55:12    129.32    129.33
    03/09/2013 23:55:52    129.32    129.33
    03/09/2013 23:56:02    129.32    129.33

Ответ 2

К сожалению, документация для csvread четко заявляет:

M = csvread(filename) считывает форматированный файл с разделителями-запятыми, filename. Файл может содержать только числовые значения.

Так как / не является ни запятой, ни числовым значением, она вызывает ошибку.