2013-04-22 4 views
4

В bash я мог бы написать простой скрипт, как показано ниже; прочитать содержимое файла в папке, как я определить путь к файлу с помощью переменной окружения «fileplace»определение пути для файла в FORTRAN

#!/bin/bash 

fileplace="/home/vijay/data1/process-folder1/" 

cat $file/file1.dat 

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

Я пробовал написать простой код FORTRAN 90, как показано ниже для тестирования.

program test_read 
implicit none 

open (unit=10, status="old",file="/home/vijay/data1/process-folder1/file1.dat") 
read(10,*) junk 
write(*,*) junk 

stop 
end 

Если я могу хотеть, чтобы избежать использования длинного пути (/ дом/Виджей/data1/процессного Folder1 /) в коде FORTRAN. Есть ли возможность достичь этого? Если да, то кто-нибудь может помочь исправить этот код FORTRAN? Оцените любую помощь заранее.

Спасибо

Виджей

ответ

10

Fortran не является хорошим языком для работы со строками, но это все еще возможно.

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

CHARACTER(*), PARAMETER :: fileplace = "/home/vijay/data1/process-folder1/" 

Файл может быть открыт с

OPEN(unit=10, status="old",file=fileplace//"file1.dat") 

Если вы хотите изменить путь во время выполнения, вы должны установить соответствующую длину для fileplace и настроить его соответствующим образом, когда вы хотите использовать его:

CHARACTER(100) :: fileplace 

WRITE(fileplace,*) "/home/vijay/data1/process-folder1/" 
OPEN(unit=10, status="old", file=TRIM(ADJUSTL(fileplace))//"file1.dat") 

функции ADJUSTL() и TRIM() переместите содержимое строки влево, чтобы удалить все ведущие пробелы, а затем разрезать все конечные пробелы.

+0

Мой путь подобен этому (/ home/vijay/Simulation-Folder-Feb2013/chapter6-lyo-paper1-Vj/TRAJ-malto12per /). Я использовал в преамбуле (CHARACTER (*) :: fileplace = "/ home/vijay/Simulation-Folder-Feb2013/chapter6-lyo-paper1-Vj/TRAJ-malto12per /").Затем в тело кода, который я напечатал (OPEN (unit = 31, status = "old", file = fileplace // "maltoLyo12per-reimage-set1.traj"). Но я получаю ошибку, подобную этой [CHARACTER (*): : fileplace = "/ home/vijay/Simulation-Folder-Feb2013/chapter6-lyo- Ошибка: сущность с предполагаемой длиной символа в (1) должна быть фиктивным аргументом или PARAMETER]. Не могли бы вы дать комментарий по этому вопросу? ? Спасибо – Vijay

+0

Sry ... Я забыл «PARAMETER». – Stefan

+0

Использование списка, предназначенного для внутренней записи для определения символьной переменной со значением символьной константы, излишне свернуто. Простое утверждение присваивания было бы лучше (это было бы также позволяют удалить ссылку ADJUSTL). – IanH

7

Вы можете использовать некоторые Fortran, как это:

fileplace = "/home/vijay/data1/process-folder1/" 

open (unit=10, status="old",file=fileplace//"file1.dat") 

Примечание:

  1. В Fortran конкатенации выражается оператором //.
  2. Вы должны объявить переменную характер fileplace, что-то вроде

    character(len=:), allocatable :: fileplace

должны это сделать.

Fortran 2003 представил стандартную процедуру GET_ENVIRONMENT_VARIABLE, которая может быть вам интересна, если ваш компилятор ее реализует.

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