Триггеры чрезвычайно мощны и полезны, существует любое количество сценариев, где триггер является лучшим решением проблемы.
Они - также очень хороший инструмент "взлома". Часто существуют ситуации, где Вы не находитесь в непосредственном управлении и кода и базы данных. Если необходимо ожидать 2 месяца следующей главной версии кода, все же можно применить патч к базе данных сразу тогда, можно поместить триггер на таблицу для выполнения некоторой дополнительной функциональности. Тогда, когда выпуск кода возможен, можно заменить этот триггер кодированной версией той же функциональности при желании.
В конце дня, все является "злым", если Вы не знаете то, что он делает. Решение, что триггеры - то, потому что существуют разработчики, которые не понимают их, совпадает с утверждением, что автомобили являются злыми, потому что некоторые люди не могут управлять...
В рамках стандартов Fortran нет решения этого вопроса. Однако, если ваш компилятор понимает обратную косую черту в строках Fortran (GNU Fortran понимает, если вы используете опцию -fbackslash
), вы можете написать
write (*,"(A)",advance="no") "foo"
call sleep(1)
write (*,"(A)",advance="no") "\b\b\bbar"
call sleep(1)
write (*,"(A)",advance="no") "\b\b\bgee"
call sleep(1)
write (*,*)
end
Здесь используется символ обратной косой черты ( \ b
) для удаления ранее написанных символов в этой строке.
NB: если ваш компилятор не понимает advance = "no"
, вы можете использовать связанные нестандартные приемы, такие как использование $
спецификатор в строке формата.
Следующее должно быть переносимым между системами за счет использования ACHAR (13)
для кодирования возврата каретки.
character*1 creturn
! CODE::
creturn = achar(13) ! generate carriage return
! other code ...
WRITE( * , 101 , ADVANCE='NO' ) creturn , i , npoint
101 FORMAT( a , 'Point number : ',i7,' out of a total of ',i7)
OPEN(6,CARRIAGECONTROL ='FORTRAN')
DO I=1,5
WRITE(6,'(1H+" ",I)') I
ENDDO