Чтение CSV-файла с текстом с помощью textread

#matlab #csv

#matlab #csv

Вопрос:

Я читаю CSV-файл в Matlab с помощью textread функции и сохраняю значения в ячейках типов string и float.

 [string1, string2, values] = textread('/path/xyz.csv', '%s %s %f', 'headerlines', 1);
  

Данные состоят из трех столбцов. Я полагаю, что два из них имеют строковый тип, а один — float.

Пример данных

 @timestamp  host    value
March 5th 2019, 13:41:54.879    tscompute1  0.399
March 5th 2019, 13:41:54.879    tscompute1  0.599
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  0.2
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  0
March 5th 2019, 13:41:54.879    tscompute1  100
March 5th 2019, 13:41:54.879    tscompute1  0.4
  

Ошибки выполнения нет. Но прочитанные значения не соответствуют ожидаемым. Пожалуйста, ознакомьтесь с примером вывода ниже.

Значения, хранящиеся в string1, выглядят следующим образом

 '"March'
','
'"March'
','
'"March'
','
'"March'
','
  

Значения, хранящиеся в string2, выглядят следующим образом

 '5th'
'13:41:54.879",tscompute1,0.399'
'5th'
'13:41:54.879",tscompute1,0.599'
'5th'
'13:41:54.879",tscompute1,0'
'5th'
'13:41:54.879",tscompute1,0.2' 
  

Значения, сохраненные в values, выглядят следующим образом

 2019
0
2019
0
2019
0
2019
0
  

Комментарии:

1. Просматривая документ textread , вы можете указать разделитель. Исходя из изображения ваших данных, я бы предположил, что столбцы разделены табуляцией? Итак, попробуйте установить параметр разделителя на tab t . В качестве дополнения: В справке предлагается использовать textscan вместо textread .

2. Пожалуйста, поделитесь своим текстовым файлом в виде текста, а не изображения.

3. Отредактируйте свой вопрос и включите образец в свой вопрос, не указывайте ссылку на внешний веб-сайт.

4. Вы не можете прикрепить текстовый или CSV-файл с вопросом.

5. Я не говорю о прикреплении файла. Просто скопируйте первые несколько строк текстового файла и добавьте их к вашему вопросу.

Ответ №1:

Кажется, что в вашем тексте несовместимые разделители, дата отделена от времени запятой, в то время как время, имя «tscompute1» и число разделены пробелами.

Проще всего прочитать каждую строку как шесть элементов, каждый из которых разделен пробелами, причем пять из них являются строками, а шестой — числом.

 [s1, s2, s3, s4, s5, values] = textread('/path/xyz.csv', '%s %s %s %s %s %f', 'headerlines', 1);
  

Это позволяет получить дату (объединить строки в s1-s3, убрать запятую в конце), время (s4), имя (s5) и значение.