Перейти к публикации

Вывод 2D массива в файл


MaryMadeleine

Рекомендованные сообщения

Доброго времени суток!

 

Знаю, что тема не новая, но нигде толкового ничего найти не могу. Задача простая - есть 2D массив (m x n) элементов, нужно записать его в текстовый файл. Я не понимаю, как пользоваться *MWRITE, поэтому всю жизнь писал в столбик через *VWRITE и потом преобразовывал обратно в матрицу. Подскажите, пожалуйста, как вывести массив в таком же виде в файл? То есть m строк и n столбцов. Можно ли в ANSYS писать значения по одному в строку, чтобы он автоматом не делал перенос строки (*VWRITE все пишет с новой строки)?

 

Я вот так пытался, но получается не пойми-что:

 

*dim,test,array,5,7

*do,i,1,5
*do,j,1,7
test(i,j)=i*7+j
*enddo
*enddo

*create,macro

*vlen,5,7
*mwrite,test,test,txt
(E11.3)
*end

/input,macro

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


UnPinned posts

Не уверен, что это именно то, что вам нужно, но вот пример макроса:

*CREATE,reaction
*cfopen,Results,txt,,append
*vwrite,Angle,ReactY,ReactZ,MomX,
(F3.0,'  ',F15.5,'  ',F15.5,'  ',F15.5)
*cfclos
*END

Вот результат, который он выдает:

 0.       2513.27412          0.00000          0.00000
 5.       2494.20589        217.95088         -6.57139
10.       2437.58058        429.27943        -13.09276
15.       2345.11871        627.56455        -19.51450
20.       2219.62970        806.78143        -25.78771
25.       2064.92646        961.48467        -31.86467
....

 

Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, Dandy сказал:

Не уверен, что это именно то, что вам нужно, но вот пример макроса:


*CREATE,reaction
*cfopen,Results,txt,,append
*vwrite,Angle,ReactY,ReactZ,MomX,
(F3.0,'  ',F15.5,'  ',F15.5,'  ',F15.5)
*cfclos
*END

Вот результат, который он выдает:


 0.       2513.27412          0.00000          0.00000
 5.       2494.20589        217.95088         -6.57139
10.       2437.58058        429.27943        -13.09276
15.       2345.11871        627.56455        -19.51450
20.       2219.62970        806.78143        -25.78771
25.       2064.92646        961.48467        -31.86467
....

 

Ну да, это то, о чем я писал: тут руками приходится писать в строку элементы, которые я хочу вывести, т.е. "Angle,ReactY,ReactZ,MomX". Мой вопрос был о том, можно ли вывести вот так же в строчку любое число элементов матрицы, например, n = 1000.

Ссылка на сообщение
Поделиться на других сайтах
В 21.10.2020 в 14:52, MaryMadeleine сказал:

*vlen,5,7
*mwrite,test,test,txt
(E11.3)

 

заменить на...

 

*mwrite,test,test,txt
(7E11.3)

 

Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, Борман сказал:

*mwrite,test,test,txt (7E11.3)

О, спасибо, это работает. А есть возможность в формат (7E11.3) вместо 7 засунуть параметр?

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, MaryMadeleine сказал:

О, спасибо, это работает. А есть возможность в формат (7E11.3) вместо 7 засунуть параметр?

Наэрно нет.

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

Вот чёрт... проще вам попробовать самому врубиться, чем мне объяснять что тут происходит :lighten:

*dim,test,array,5,7

*do,i,1,5
*do,j,1,7
	test(i,j)=i*7+j
*enddo
*enddo

par=7

*cfopen,hack.mac
	s1='*mwrite,test,test,txt'
	*vwrite,s1,par
%c%/(%iE11.3)
*cfclose

*use,hack.mac
/delete,hack.mac

 

Ссылка на сообщение
Поделиться на других сайтах
В 22.10.2020 в 20:47, Борман сказал:

Наэрно нет.

Есть. Надо просто записать макрос из-под макроса, а потом считать его.

Собственно, что и делается здесь:

В 22.10.2020 в 21:08, Борман сказал:

*dim,test,array,5,7 *do,i,1,5 *do,j,1,7 test(i,j)=i*7+j *enddo *enddo par=7 *cfopen,hack.mac s1='*mwrite,test,test,txt' *vwrite,s1,par %c%/(%iE11.3) *cfclose *use,hack.mac /delete,hack.mac

 

Вот ещё от меня примерчик (как у меня водится, с COM'ом):

/OUTPUT,exec !Начинаем писать в файл

/COM, *MWRITE,fi_x,fi_x,txt,,JIK,n,pts,1 !Записываем сам текст команды MWRITE

/COM, (%n%(1x,E20.13)) !Записываем формат с параметром n

/OUTPUT !Перекидываем вывод обратно в консоль

/INPUT,exec !Считываем полученный макрос

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

 

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

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

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

Гость
Ответить в тему...

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

  Разрешено не более 75 эмодзи.

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

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

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

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




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