c c primo programma c input in test.inp c crea i file con estensione .dbf e .ndx c PROGRAM Cre_Tst PARAMETER (Max_Rec=1000,Max_Fil=64) DIMENSION Ind_Vec(Max_Rec) CHARACTER*2 Ans_Vec(Max_Rec) CHARACTER*40 Fil_Src(Max_Fil),Fil_Dbf(Max_Fil),Fil_Ndx(Max_Fil) CHARACTER*40 Fil_Prn CHARACTER*1 BSL CHARACTER Tst_Lin*80,Ans*2,String*80 C BSL=CHAR(92) OPEN(UNIT=20,FILE='test.inp',STATUS='OLD') READ(20,'(A)') String READ(20,*) Num_Fil READ(20,'(A)') String DO i=1,Num_Fil READ(20,'(A)') String WRITE (Fil_Src(i),'(A)') String(:JLEN(String))//'.src' WRITE (Fil_Dbf(i),'(A)') String(:JLEN(String))//'.dbf' WRITE (Fil_Ndx(i),'(A)') String(:JLEN(String))//'.ndx' ENDDO C numero di questionari READ(20,'(A)') String READ(20,*) n_Que C numero di domande READ(20,'(A)') String READ(20,*) n_Ask n_Ask=n_Ask*Num_Fil C nomi dei File dei Questionari e delle Domande READ(20,'(A)') String READ(20,'(A)') String WRITE (Fil_Prn,'(A)') String(:JLEN(String))//'.tex' CLOSE(20) OPEN(UNIT=20,FILE=Fil_Prn,STATUS='OLD',ERR=10) CLOSE(20,STATUS='DELETE') 10 OPEN(UNIT=20,FILE=Fil_Prn,STATUS='NEW') C WRITE(20,'(A)') bsl//'documentstyle{article}' WRITE(20,'(A)') bsl//'begin{document}' DO ix=1,Num_Fil IF (ix.GT.1) WRITE(20,'(A)') bsl//'newpage' WRITE(20,'(A)') '{'//bsl//'bf Domande Contenute nel File:}' WRITE(20,'(A)') bsl//'begin{verbatim}' WRITE(20,'(A)') Fil_Src(ix) WRITE(20,'(A)') bsl//'end{verbatim}' WRITE(20,'(A)') bsl//'medskip' OPEN(UNIT=10,FILE=Fil_Src(ix),STATUS='OLD') OPEN(UNIT=11,FILE=Fil_Dbf(ix),ACCESS='DIRECT',RECL=80, * FORM='FORMATTED',STATUS='OLD',ERR=11) CLOSE(11,STATUS='DELETE') 11 OPEN(UNIT=11,FILE=Fil_Dbf(ix),ACCESS='DIRECT',RECL=80, * FORM='FORMATTED',STATUS='NEW') OPEN(UNIT=12,FILE=Fil_Ndx(ix),STATUS='OLD',ERR=15) CLOSE(12,STATUS='DELETE') 15 OPEN(UNIT=12,FILE=Fil_Ndx(ix),STATUS='NEW') Num_Rec=0 i_Cur=1 DO WHILE (1.EQ.1) READ(10,'(A)',END=20) Tst_Lin iAns=INDEX(Tst_Lin,'%#') IF (iAns.EQ.0) THEN WRITE(11,'(A)',REC=i_Cur) Tst_Lin WRITE(20,'(A)') Tst_Lin(1:JLEN(Tst_Lin)) i_Cur=i_Cur+1 ELSE IF (Num_Rec.GT.0) Ind_Vec(Num_Rec)=i_Cur Num_Rec=Num_Rec+1 Ans=Tst_Lin(iAns+2:iAns+3) Ans_Vec(Num_Rec)=Ans WRITE (20,'(A,i5,A)') bsl//'hspace{-1.cm}' * //bsl//'makebox[.6cm][r]' * //'{'//bsl//'bf ',Num_Rec,')}'//bsl//'hspace{.4cm}' WRITE (20,'(A)') bsl//'marginpar{'//bsl//'vspace{.01 mm}' * //'{'//bsl//'bf '//Ans//'}}' ENDIF ENDDO 20 CONTINUE Ind_Vec(Num_Rec)=i_Cur WRITE(12,'(I5)') Num_Rec DO i_Rec=1,Num_Rec WRITE(12,'(I5,A2)') Ind_Vec(i_Rec),Ans_Vec(i_Rec) ENDDO CLOSE(10) CLOSE(11) CLOSE(12) ENDDO WRITE(20,'(A)') bsl//'end{document}' CLOSE(20) STOP END C----------------------------------------------------------------------------- C FUNCTION JLEN C C CALCOLO DELLA LUNGHEZZA DI UNA VARIABILE ALFANUMERICA C Line VARIABILE ALFANUMERICA C JLEN NUMERO DEI CARATTERI C----------------------------------------------------------------------------- FUNCTION JLEN(Line) CHARACTER *(*) Line DO 15 L=LEN(Line),0,-1 LL=L IF (Line(L:L).GT.' ') GOTO 20 15 CONTINUE 20 JLEN=LL RETURN END