2015-07-06 4 views
1

Я пытаюсь читать данные из файлов по строкам, используя fgets. У меня есть несколько строк этого Формат-Извлечение данных из строки в matlab

0.0000 -0.5808 0.0000 F 0 0 0 0 0 0 0 0 0 0 0 0 

пространство между каждым является переменной.

str=fgets(fid) 

с помощью этого я получаю весь string.I хочет извлечь информацию из этой строки и изменить values.For например, я хочу изменить первые два float значения и сказать, второй последний integer.So после изменений это будет мой новый лайн-

0.4500 9.5808 0.0000 F 0 0 0 0 0 0 0 0 0 0 6 0 

Один из способов сделать это, чтобы идти по всей длине символа строки по характеру, получить значения между spaces преобразовать их в float или integer и заменить их в string.I хотят знаете, есть какой-то другой метод, с помощью которого я могу извлечь информацию иона без прохождения всей строки. Потому что формат строки всегда одинаковый - три значения float, за которыми следует символ, за которым следуют 12 целых чисел. Есть ли способ получить доступ к этим элементам напрямую?

Редактировать - Чтобы быть точным, я могу сделать что-то вроде следующего, который я сделал в c .Это довольно просто-

sscanf(str,"%f %f %f %c %d %d ",&a,&b,&c,&d,&e,&f); 

Таким образом, с помощью этого я мог бы легко, что я want.So , есть что-то подобное в Matlab?

+1

А, да. Я считаю, что 'strread()' - это то, что вы ищете. Проверьте это здесь: http://www.mathworks.com/help/matlab/ref/strread.html – Bobbyrogers

+0

Функции ['sscanf'] (http://mathworks.com/help/matlab/ref/sscanf.html) и ['fscanf'] (http://mathworks.com/help/matlab/ref/fscanf.html) также существует в Matlab, и синтаксис очень похож на эквивалент' C', если вы привыкли к нему. – Hoki

+0

@Hoki yes, но 'sscanf' в matlab не позволяет нам контролировать выходные переменные. Если я не ошибаюсь, у нас может быть только один вывод в' sscanf' – LifeIsGood

ответ

2

Использование textscan для этого purpose.Check оно вне here

В вашем случае вы можете сделать что-то из этого sort-

A = textscan(str,'%.4f %.4f %.4f %c %d %d %d %d %d %d %d %d %d %d %d %d'); 

Вы получите 1X16 cell.You может получить доступ к любому элементу с помощью A{i} . Например, чтобы получить характер, просто сделайте это -

ch=char(A{4}); 

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

1

В Matlab вам следует избегать циклов или улов. Попробуйте использовать однострочные предложения, используя синтаксис матрицы.

В этом случае вместо чтения файла с помощью fgets используйте непосредственно textscan для чтения файла.

C = textscan(fileID,formatSpec) 

Избегайте использования тех же команд, что и c, если в Matlab есть специализированный. Он обычно имеет лучшую производительность

Смежные вопросы