Andrea Gavana wrote: > "err=8" means that, if an error occours in > reading the file, > it should go to the label "8 continue" and continue reading the file
Silently ignoring errors when reading a file doesn't sound like a good idea to me at all, especially if different records have different formats. > > Well, does anyone have some suggestion about which kind of > material/tutorial on similar things I should read? How can I deal in > Python with variables that must be 8-chars or 4-chars in order to read > correctly the file? (a) read the docs on the struct module (b) eyeball this rough untested translation: 8<--- def filereader(filename): import struct f = open(fname, 'rb') # 'rb' is read binary, very similar to C stdio fmt = '>8si4s' # Assuming unformatted means binary, # and integer means integer*4, which is signed. # Also assuming that the 3-variable records are fixed-length. fmtsz = struct.calcsize(fmt) while True: buff = f.read(fmtsz) if not buff: # EOF break keyword, number, keytype = struct.unpack(fmt) keyword = keyword.rstrip() # remove trailing spaces keytype = keytype.rstrip() if keyword == 'DIMENS': # 'dimens' is neither declared nor initialised in the FORTRAN # so I'm just guessing here ... buff2 = f.read(4) dimens = struct.unpack('>i', buff2) break print keyword, number, keytype # or whatever # reached end of file (dimens *NOT* defined), # or gave up (dimens should have a value) f.close() # not absolutely necessary especially when only reading if __name__ == "__main__": import sys filereader(sys.argv[1]) 8<--- If this doesn't work, and it's not obvious how to fix it, it might be a good idea when you ask again if you were to supply a FORTRAN-independent layout of the file, and/or a dump of a short test file that includes the DIMENS/dimens caper -- you can get such a dump readily with the *x od command or failing that, use Python: #>>>repr(open('thetestfile', 'rb').read(100)) # yes, I said *short* HTH, John -- http://mail.python.org/mailman/listinfo/python-list