MATLAB: Как импортировать несколько файлов CSV со смешанными типами данных - PullRequest
2 голосов
/ 12 февраля 2012

Я только начал изучать MATLAB и испытываю трудности с импортом файлов CSV в двумерный массив.

Вот пример csv для моих нужд: (все файлы csv имеют одинаковый формат с фиксированными столбцами)

Date,                Code,         Number....
2012/1/1,            00020.x1,             10
2012/1/2,            00203.x1,            0300
...

Поскольку csvread() работает только с целыми числами, следует ли мне импортировать числовые данные и текстовые данные отдельно или есть какой-нибудь быстрый способ импорта нескольких файлов CSV со смешанными типами данных ?

Большое спасибо !!

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Возможно, вам нужна функция xlsread .

Открывает любой файл, распознаваемый Excel, и автоматически отделяет текстовые данные от числовых данных.

Проблема заключается в том, что по умолчанию для моего компьютера, по крайней мере, используется разделитель ; , а не , (по крайней мере для моего языка здесь, в Бразилии).Поэтому xlsread попытается разделить поля в файле с помощью ; , а не запятой, как вам хотелось бы.

Чтобы изменить это, вам нужно изменить системные языковые настройки, чтобы добавитьзапятая как разделитель списка.Поэтому, если вам это нравится, для этого в Windows Vista нажмите «Пуск», «Панель управления», «Региональные и языковые параметры», настройте этот формат и измените разделитель списка с «;».к ','.В других окнах процесс должен быть почти таким же.

После этого, набрав:

[num, txt, all] = xlsread('your_file.csv');

вернет что-то вроде:

num =

10
300


txt = 

'01/01/2012'    ' 00020.x1'
'02/01/2012'    ' 00203.x1'


all = 

'01/01/2012'    ' 00020.x1'    [ 10]
'02/01/2012'    ' 00203.x1'    [300]

Обратите внимание, что если вашlocale уже имеет разделитель списка, установленный на ',', вам не нужно ничего менять в вашей системе, чтобы это работало.

Если вы не хотите менять свою систему просто для использования xlsread , тогда вы можете использовать функцию textcan , описанную здесь: http://www.mathworks.com/help/techdoc/ref/textscan.html

Проблема в том, что это не так просто, как вызвать ее, так как вам придетсяоткройте файл, выполните итерации по строкам и скажите matlab явно формат вашего файла.

С уважением

0 голосов
/ 10 августа 2015

Я недавно написал функцию, которая решает именно эту проблему.См. delimread .

Стоит отметить, что xlsread для файлов csv работает только в Windows.В Linux или Mac xlsread работает в «базовом» режиме, который не может читать файлы CSV.Возможно, в longrun не будет хорошей идеей использовать xlsread, если вам нужно выполнить миграцию между платформами или автоматизировать выполнение кода на серверах Linux.

xlsread также намного медленнее, чем другие функции синтаксического анализа текста, поскольку открывает Excelсеанс для чтения файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...