Чтение файлов 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 

В windowsх я могу без проблем прочитать этот точный файл с помощью функции 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) 

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

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 году, функция textscan MATLAB была обновлена, чтобы напрямую считывать даты и время. Теперь код будет выглядеть так:

 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 

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

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

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

Вы можете использовать readtable , так как он примет любой ввод.

https://www.mathworks.com/help/matlab/ref/readtable.html

  • Как получить все файлы под определенным каталогом в MATLAB?
  • Как найти все перестановки (с повторением) в MATLAB?
  • Полученные на основе контента графические изображения и диаграммы точности-повторения с использованием цветовых гистограмм в MATLAB
  • Загрузка нескольких изображений в MATLAB
  • Рекурсивная анонимная функция Matlab
  • Строка для имени переменной MATLAB
  • Как я могу загрузить 100 файлов с похожими именами и / или строкой всего за один шаг в MATLAB?
  • Возможно ли в Matlab явно форматировать выходные номера?
  • Как использовать алгоритм SIFT для вычисления того, как похожи два изображения?
  • Несколько графиков на одном рисунке
  • напечатать имя переменной в Matlab
  • Давайте будем гением компьютера.