#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) и значение.