      subroutine observ(moob,qqfinf,qqfing,qq1st,temp)
      integer moob
      logical qqfinf, qqfing, qq1st, qnumbr, frstrd
      save frstrd
      double precision temp(*)
      include 'maincomo.for'
      character*8 strcnv
      double precision trndat,blank
      data blank/8h        /
      qqfinf=.false.
      qqfing=.false.
      if (qfirst) then
         qfirst=.false.
         frstrd=.true.
         idic=1
      endif
      if (string.eq.'end of file') then
         qqfinf=.true.
         return
      endif
      if (string(1:10).eq.'##########') then
         idic=idic+1
         frstrd=.true.
      endif
 10   if (iocr.ne.9) then
         read(iocr,'(a80)',end=30) string
      else
c        accept string
      endif
      if (string(1:10).eq.'##########') then
         qqfing=.true.
         return
      endif
      do 20 i=1,mxrvar
         nxttab=index(string,tabchr)
         if (nxttab.gt.1) then
            formt=' '
            if (vfmt(i).eq.11) then
               obs(i)=blank
               qmiss(i)=.true.
            elseif (vfmt(i).eq.10) then
               write(formt,'(2h(a,i2,1h))') nxttab-1
               read(string,formt) obs(i)
               qmiss(i)=.false.
            else
               write(formt,'(2h(f,i2,3h.0))') nxttab-1
               read(string,formt) obs(i)
               qmiss(i)=.false.
               if (varnam(i).eq.'time    ') then
                  obs(i)=trndat(obs(i))
               endif
            endif
            do 25 j=nxttab+1,80
 25            string(j-nxttab:j-nxttab)=string(j:j)
         else
            obs(i)=blank
            qmiss(i)=.true.
         endif
 20      continue
      if (frstrd) then
         frstrd=.false.
         do 50 i=1,mxrvar
            if (varnam(i).eq.'id') go to 60
 50         continue
        return
 60     sfdic(idic)=strcnv(obs(i))
      endif
      return
 30   string='end of file'
      qqfing=.true.
      return
      end
