Перейти к содержанию
    

MATLAB, запись тектового файла

9 минут назад, Herz сказал:

Ею я и пользуюсь. Но и для "любого" есть ограничения...

Если уже пользуетесь, то, наверное, у вас есть какой-то цикл для вывода данных в файл. Тогда можно в этом цикле проверить элементы, которые могут быть NaN, фунцкией isnan(). В зависимости от результата проверки выбрать аргументы для fprintf.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Nickolas said:

Если уже пользуетесь, то, наверное, у вас есть какой-то цикл для вывода данных в файл. Тогда можно в этом цикле проверить элементы, которые могут быть NaN, фунцкией isnan(). В зависимости от результата проверки выбрать аргументы для fprintf.

Больше того, перед заполнением массива данными, я формирую пустой массив, весь состоящий из NaN. Эти NaN остаются там, куда не произошла перезапись реальными значениями. То есть, с тем же успехом я мог бы, например, подготовить массив нулей.

Теперь я вывожу текстовый файл вот таким образом: fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix);

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно выводить не всю матрицу, а по строкам.

for r_idx = 1 : size(matrix, 1)
	if ~isnan(matrix(r_idx, 1)
        fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :));
    else
        fprintf(fid, '     %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :));
    end
end
Изменено пользователем Nickolas
отредактировал код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда уже так, наверное:

for r_idx = 1 : size(matrix, 1)
    if ~isnan(matrix(r_idx, 1)
        fprintf(fid, '%4u %2u %2u %2u %2u %7.3f\n', matrix(row_idx, :));
    else
        fprintf(fid, '%4u %2u %2u %2u %2u        \n', matrix(row_idx, :));
    end
end

Да, можно попробовать. Несколько дольше должно получиться. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, Herz сказал:

 

 

Изменено пользователем Самурай
.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

просто надо писать скрипт, составляющий текстовую(!) строку по твоим собственным правилам. и fprintf().

А если вы будете конвертацию типов оставлять на откуп системе, то время от времени будут вылезать неприятные казусы. Матлаб-Октава конечно умные на автоинициализацию, защиту переменных, объектов и на сборку мусора... но не всаегда думают так как вы хотите, выбирая типы. Это эе важно при работе с изображениями.

я всегда только так делаю, потому что все равно надо шапку таблицам добавлять.

В Octave сейчас можно и в Excel-таблицу записывать простые данные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...