Program extr_val
!
!-------------------------------------------------------
! Extraction de valeurs numeriques d'un output
!
! donnees : namelist extr_val
! TYPE		' '	INTEGER,REAL : type de la valeur numerique a extraire
! STRING	' '	string de l'output ou commence la recherche
! FORMATI      'i20'    format d'ecriture dans OUTPUTW (si TYPE=INTEGER)
! FORMATR     '(f15.6)' format d'ecriture dans OUTPUTW (si TYPE=REAL)
! OUTPUTR	' '     nom de l'output lu, d'ou on tire la valeur numerique 
!                       a extraire
! OUTPUTW	' '	nom de l'output ou on ecrit la valeur extraite
! nligne	0	nb e lignes a sauter apres la lecture de string
! blanc		0	nb de caracteres a mettre a ' ' en debut de la 
!			ligne ou on extrait la valeur
! num		1	n : chercher la nieme apparition de string
!-------------------------------------------------------
!
character(10000) namel
character(80) string,OUTPUTR,OUTPUTW,formati,formatr
character(135) aa
character(7) :: type
formatr='(f15.6)'
formati='(i20)'
call LECNAM('&EXTR_VAL',namel,5,ierr,0)

num=1
nligne=0
nblanc=0
OUTPUTR=' '
OUTPUTW=' '
string=' '
type=' '
call namela(namel,TYPE,'TYPE') 
call namela(namel,STRING,'STRING') 
call namela(namel,FORMATI,'FORMATI') 
call namela(namel,FORMATR,'FORMATR') 
call namela(namel,OUTPUTR,'OUTPUTR') 
call namela(namel,OUTPUTW,'OUTPUTW') 
call nameli(namel,nligne,'NLIGNE',4)
call nameli(namel,nBLANC,'NBLANC',4)
call nameli(namel,NUM,'NUM',4)
print*,'Test sur ',trim(string),'  dans ',trim(OUTPUTR)

if(string==' ') call abort(string,'string')
if(OUTPUTR==' ') call abort(OUTPUTR,'OUTPUTR')
if(OUTPUTW==' ') call abort(OUTPUTW,'OUTPUTW')
if(TYPE==' ') call abort(TYPE,'TYPE')
open(1,file=OUTPUTR,status='old')
open(2,file=OUTPUTW,status='unknown')

m=1
do 
   read(1,'(a135)',end=1) aa
   !print'(a)',trim(aa)
   !print*,trim(string),index(aa,trim(string))
   if(index(aa,trim(string))==0) cycle
   m=m+1
   if(m<=num) cycle
   do i=1,nligne
      read(1,'(a135)') aa
   enddo
   !print'(a)',trim(aa)
   aa(1:nblanc)=' '
   if(type=='REAL') then
      read(aa,*) e
      !print*,e
      write(2,formatr) e
   else if(type=='INTEGER') then
      read(aa,*) n
      !print*,n
      write(2,formati) n
   endif
   exit
enddo
1 continue
   
   


end

 subroutine abort(aa,bb)
character(*) aa,bb
print*,' '
print*,' Valeur incorrecte pour '//trim(bb)//' ('//trim(aa)//')'
end
