2015-12-23 1 views
1

Первая проблема заключалась в том, что я хотел создать файл и после некоторых вычислений изменить значение в центре файла. Следовательно, последовательный доступ не работает. Наконец, я добился прогресса в прямом доступе, но все напечатано в строке, но я хочу, чтобы это было под другим. Я пробовал слэш '/', но он не работает. Есть идея?Fortran: Есть ли способ добавить вертикальный интервал в файлах прямого доступа. Слэш, похоже, не работает

Мой код:

open (unit=2125, file='out.neo_to_gs2_2', status='replace', & 
     access='direct', form='formatted', recl=100) 
    write(2125,'(a16,2es16.8)',rec=1) 'mach =', mach, mach_new(ir_loc,2) 
    write(2125,777, rec=3) 'dmach_ir_loc =', dmach_ir_loc, 'g_exb =', & 
          g_exb, -(rhoc/qinp)*dmach_ir_loc(2) 
    write(2125,778, rec=4) 'ntheta =', ntheta, 'ntg_out =', ntg_out, 'ir_loc =', ir_loc 

В результате линия со всей информацией:

mach = 6.43167496E-03 -8.57318202E-05               mach_lab = 6.47227491E-03 -8.65502010E-05              dmach_ir_loc = -2.32641799E-02 1.90173879E-04   g_exb = 9.40463050E-03 -7.68784920E-05   ntheta = 32  ntg_out = 16  ir_loc = 3           

, но я хочу, чтобы это было так:

 mach = 6.43167496E-03 -8.57318202E-05 
    mach_lab = 6.47227491E-03 -8.65502010E-05 
dmach_ir_loc = -2.32641799E-02 1.90173879E-04 
     g_exb = 9.40463050E-03 -7.68784920E-05 
     ntheta = 32 
    ntg_out = 16 
     ir_loc = 3    

Где-то еще в коде я написал вторую запись

 write(2125,'(a16,2es16.8)', rec=2) 'mach_lab =', mach_lab      !wladimir        
+3

Показать код и нужный результат. –

+0

Вы можете вручную добавить основные строки в строки ... Или используйте ['ADJUSTR'] (https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gfortran/ADJUSTR.html). –

+1

С прямым доступом вам необходимо явно записать символы конца строки в записи. Это 'char (10)', если я помню. Обратите внимание, что вам нужно положить его в конце записи (столбец 100). – agentp

ответ

1

Просто используйте строку фиксированной длины для спецификатора формата (здесь: a15, 15 символов):

program test 
    write(*,'(a15,2es15.8)') 'mach = ', 6.43167496E-03, -8.57318202E-05 
    write(*,'(a15,2es15.8)') 'mach_lab = ', 6.47227491E-03, -8.65502010E-05 
    write(*,'(a15,2es15.8)') 'dmach_ir_loc = ', -2.32641799E-02, 1.90173879E-04 
    write(*,'(a15,2es15.8)') 'g_exb = ', 9.40463050E-03, -7.68784920E-05 
    write(*,'(a15,i2)') 'ntheta = ', 32 
    write(*,'(a15,i2)') 'ntg_out = ', 16 
    write(*,'(a15,i2)') 'ir_loc = ', 3 
end program 

Это приводит к:

 mach = 6.43167505E-03-8.57318228E-05 
    mach_lab = 6.47227513E-03-8.65502006E-05 
dmach_ir_loc = -2.32641790E-02 1.90173872E-04 
     g_exb = 9.40463040E-03-7.68784885E-05 
     ntheta = 32 
    ntg_out = 16 
     ir_loc = 3 
1

раствора составляет:

open (unit=2125, file='out.neo_to_gs2_2', status='replace', & 
     access='direct', form='formatted', recl=49) 
    write(2125,777,rec=1) 'mach =', mach, mach_new(ir_loc,2), char(10) 
    write(2125,777,rec=3) 'dmach_ir_loc =', dmach_ir_loc, char(10) 
    write(2125,777,rec=4) 'g_exb =', g_exb, -(rhoc/qinp)*dmach_ir_loc(2), char(10) 
    write(2125,778,rec=5) 'ntheta =', ntheta, '', char(10) 
    write(2125,778,rec=6) 'ntg_out =', ntg_out, '', char(10) 
    write(2125,778,rec=7) 'ir_loc =', ir_loc, '' 

777 format(a16,2es16.8,a) 
778 format(a16,i3,a29,a) 

write(2125,'(a16,2es16.8,a)', rec=2) 'mach_lab =', mach_lab,char(10) 
1

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

NEW_LINE('A') 
+0

Который находится на общих платформах, равных 'achar (10)', а также 'char (10)' на платформах на базе ASCII (на самом деле все они поддерживают такую ​​новую вещь, как 'new_line()'. –