четене на входен файл във fortran

Търся четене на файл, като:

NE                32         0
IBZINT             2
NKTAB            936
XC-POT    VWN       
ITER          29
MIX     2.00000000000000E-01
TOL     1.00000000000000E-05

Мислех, че това е index intrinsic, което търся, и съответно написах код:

РЕДАКТИРАНЕ Кодът е актуализиран,

   Implicit None
    integer ::i,pos
    character(50) :: name
    character(len=16),dimension(100)::key,val
    key(1)="NE"
    open(12,file="FeRh/FeRh.pot_new",status="old")
    do i=1,100
      read(12,*)name
      if (name(1:2)==key(1))then
        write(*,*)"find NE"
        write(*,*)name(1:2)
        write(*,*)name(index("NE","")+21)
      endif
    end do
    close(12)
    !write(*,*)index(key(1),"")
    End Program  readpot

Очаквам да имам 32 в 3-то write изявление. Сигурно някъде ужасно се е объркал. можете ли любезно да помогнете?


person BaRud    schedule 28.01.2014    source източник
comment
Какви са симптомите за ужасно грешно? Липсата на reads обаче вероятно не помага.   -  person francescalus    schedule 28.01.2014
comment
Изглежда, че ви липсва : при третото писане. Това трябва ли да бъде name(index("NE",""):21)?   -  person francescalus    schedule 28.01.2014


Отговори (2)


Когато искате да прочетете ред от файла, вие използвате вход, насочен към списък (* като формат). Това не е това, което искате, тъй като ще има известно ограничено анализиране по време на изпълнение.

Тоест read(12,*) name на първия запис ще доведе до "NE", подплатен с много интервали в променливата name, тъй като записът ще бъде разделен на интервалите.

Тъй като искате целият ред в name, използвайте формата '(A)' в read.

След като имате този ред, можете да извършите по-нататъшния анализ. Въпреки това, от това, което показвате, index не изглежда да помага, особено когато проверявате срещу празен подниз. Знаете дължината на ключа (използвайки len_trim), така че ако имате съвпадение, знаете местоположението на първия разделител.

person francescalus    schedule 28.01.2014

Ако исках да прочета ред като

NE                32         0

Бих написал изявление като

read(12,*) name, int1, int2

и очаквам процесорът ми да зададе name на NE, int1 на 32 и int2 на 0, ако, тоест, декларирах int1 и int2 като цели числа.

Озадачен съм, че изглежда искате да прочетете ред текст и след това да го анализирате, като през цялото време пренебрегвате предимствата на насоченото към списък въвеждане. Ако искате да го анализирате в нещо различно от символна променлива и две цели числа, уведомете ни.

person High Performance Mark    schedule 28.01.2014
comment
Искам да прочета всички стойности, NE 32 0 е само като минимален пример, по-късно трябва да се използва в основната програма. Как мога да го анализирам? - person BaRud; 28.01.2014
comment
Ако искате да прочетете ред, който съдържа кратък низ, последван от две цели числа, всички разделени с интервали, следвайте моето предложение. Ако трябва да анализирате реда по някакъв друг начин, обяснете как. - person High Performance Mark; 28.01.2014
comment

Опитайте да отстраните грешки за всичко чрез:

  1. Добавяне на това в края на вашия logging.properties файл, намиращ се в {CATALINA-HOME}/conf:

    #To see the most detailed level of logging for all classes, uncomment the following line:
    org.apache.catalina.level=FINEST
    
  2. Рестартирайте Tomcat

  3. Изпълнете следното от терминала, за да получите списък с буркани, които трябва да бъдат пропуснати (с любезното съдействие на @joseph-lust в тази публикация ):

    egrep "No TLD files were found in \[file:[^\]+\]" {CATALINA-HOME}/logs/catalina.out -o | egrep "[^]/]+.jar" -o | sort | uniq | sed -e 's/.jar/.jar,\\/g' > ~/skips.txt
    
  4. Отворете skips.txt в началната директория на вашия потребител

  5. Добавете този списък към {CATALINA-HOME}/conf/catalina.properties след следния ред:

    org.apache.catalina.startup.TldConfig.jarsToSkip=
    
  6. Уверете се, че сте премахнали/коментирали това, когато сте готови, за да предотвратите увеличаването на вашите лог файлове

Все още не съм сигурен защо се случва това, тъй като изглежда, че за повечето работи премахването на коментарите за реда TldLocationsCache.

- person agentp; 01.02.2014