Хобрук: Ваш путь к мастерству в программировании

Определение конструкций if-endif и do-enddo в длинном коде на Фортране

Я пытаюсь изменить очень большой устаревший код Fortran (fortran77), но, поскольку автор кода не позаботился о написании комментариев, а также не использовал надлежащие отступы и т. д., у меня огромные трудности с изменением кода. Что мне нужно, так это какой-то способ (пакет или инструмент командной строки), который позволит мне определить конец данной конструкции, такой как if-then или do-enddo, если я покажу, где она начинается. Например:

if(x .eq. 0)then
  if (y .eq. 0)then
    print*, y

  endif
endif

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

Буду весьма признателен за любую помощь. Заранее спасибо.


Ответы:


1

Вот два варианта сделать то, что вы хотите:

http://www.polyhedron.com/pf-plusfort0html

https://sourceforge.net/projects/findent/files/

Другой - сделать (самостоятельно) небольшой код для создания отступов в файлах FORTRAN. Это не так сложно :)

25.08.2016
  • находка отличная! Большое спасибо. 25.08.2016

  • 2

    В форте есть следующая конструкция маркировки (может быть стандартом в F90):

     Cat_Loop:
    &DO I = 1, N
        !<stuff>
      Dog_Loop: DO K = 1, M, 9  !Because Dogs are canines!
        !<stuff>
      Lizard_Loop:
    &  DO J = 1, M
        !<stuff>
    
        ENNDO Lizard_Loop
      ENNDO Dog_Loop
    ENDDO Cat_Loop
    

    SELECTED CASE иногда полезен там, где обычно находится оператор IF. Это еще один стандарт 90:

    SELECTED CASE (Dog)
      CASE(-9)
        <Stuff>
      !ENDCASE
      CASE(1)
        <Stuff>
      !ENDCASE
      CASE(2)
        <Stuff>
      !ENDCASE
      CASE(9)
        <Stuff>
      ENDCASE
      DEFAULT
        WRITE(*,*)' Why am I here with Dog=',Dog
      ENDCASE
    END SELECT
    

    Самое первое, что я бы сделал, это зафиксировать некоторый вывод для известных входных данных и создать какой-то способ его «модульного тестирования». И периодически убедитесь, что вы придерживаетесь пути, на котором он был ранее.

    25.08.2016

    3

    Есть ли какая-то особая причина, по которой вы ограничиваете себя Fortran 90; ему почти 3 десятка лет. Современный Фортран позволяет использовать идентификаторы для управляющих структур, exit больше не ограничивается циклами do, а goto, наконец, устарел благодаря использованию конструкции block Fortran 2008.

    alpha: block
        bravo: do i = 1, num_in_set
            charlie: if (x == a(i)) then
                delta: select case (i)
                    case (FIRST)
                        call do_something(x)
                    case (SECOND)
                        call do_something_else(x)
                    case (THIRD)
                        cycle bravo
                    case default
                        exit alpha
                end select delta
            else if (x == a(i+1)) then
                x = foo(a)
            else
                x = bar(a)
                exit alpha
            end if charlie
            call finally_do_something(x)
        end do bravo
    end block alpha
    
    25.08.2016
  • Я думаю, вы не прочитали слово устаревший код в моем вопросе. 26.08.2016
  • @SnehalShekatkar Я думал, вы заинтересованы в рефакторинге устаревшего кода, чтобы он соответствовал современным практикам. Вы можете смешивать и сочетать старые и новые коды без изменений. Современный Fortran в основном обратно совместим, т. Е. Код, соответствующий стандарту FORTRAN 77, также совместим с Fortran 2015, если он не включает редко используемые удаленные функции, такие как assign, do циклы с индексами с плавающей запятой, pause, H дескриптор редактирования и т. д. 26.08.2016
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..