2016-11-13 8 views
1

Я только что начал изучать Octave и пытаюсь прочитать файл csv, содержащий данные в виде строки, целого числа и float. Пример приведен нижеЧтение многоформатных данных в Octave

a,b,c,d 
1,c,10,1234.2 
e,2,4,5 

Первоначально я пытался много используя csvread. Некоторые из моих примеров приведены ниже:

[val1, val2, val3, val4] = csvread('input.csv', '%s %s %s %s'); 

Но я получаю сообщение об ошибке, как error: dlmread: error parsing RANGE

Затем с помощью этого question, я использовал textread функции, как показано ниже:

[val1, val2, val3, val4] = textread('input.csv', '%s %s %s %s', 'delimiter', ','); 

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

val1 = 
{ 
    [1,1] = a 
    [2,1] = 1 
    [3,1] = e 
} 

Пожалуйста, может кто-нибудь помочь мне в

1) Выяснить, что случилось в csvread.

2) Почему textread Функция возвращает адреса. Как их избежать?

Заранее благодарим за помощь.

+0

Что ваш желаемый результат? –

ответ

2

Использование dlmread, которое является причиной вашей ошибки, можно найти в этом answer. Обратите внимание, что

x = csvread (filename, dlm_opts) 

эквивалентно

x = dlmread (filename, "," , …) 

Элемент, возвращенный textread

val1 = 
{ 
    [1,1] = a 
    [2,1] = 1 
    [3,1] = e 
} 

является cell array of strings. Используются массивы ячеек, поскольку матрица должна состоять из векторов равной длины, что не имеет места, когда один управляет одним словом переменного размера. Если бы кто-то сохранил слова в матрице, все строки/столбцы должны были бы быть «заполнены», чтобы они были дольше, чем самое длинное слово.

Чтобы преобразовать элемент в определенный индекс массива клеток (VAL1) к ​​вектору вы используете cell2mat

vec=cell2mat(val1(index));