Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Can't write to file from sub class

Status
Not open for further replies.

jmpurser

Programmer
Nov 19, 2001
12
US
Hello,

I'm working on a project to convert the transaction numbers for out Point of Sale (POS) system from one numbering scheme to another. I did it as an object oriented project for design exercise. It's been fun and I learned a lot.

Now I have a problem.

My data is in ISAM files all having a common structure with each file having it's own format(s). I wrote a super class with 99% of the processing in it (dim_fil.py) and a sub class (in this case sm0.py) which has to have a data map (dictionary) and if there is more than one format for the file the sub class overrides the super class method of determining the format.

Really amazingly simple once I got the idea and stopped fighting the language and the design model.

Here's my problem. If I instantiate an object of type SM0 I can read the SM0 file just fine. But I can't write to it. Neither my WriteFieldsByNumber() function nor directly accessing SM0.myfile.write() works. No error message, just doesn't change the file. However if I instantiate a dim_file object and open the same sm0.d file with it I CAN write to it! I can also open it directly and write to it. All seemingly with the same code.

Working interactively I can type:
import struct
from sm0 import sm0
a = sm0('sm0.d', 'edit')
a.seek(517) #Where the transaction number starts.
a.myfile.write(struct.pack('>I', 444444)) # myfile is the file pointer
a.myfile.tell()
521
# No Error message but looking at the transaction number shows it has not
been changed and neither has anything else.

# Now this works.

import struct
from dim_file import dim_file
a = dim_file('sm0.d', 'edit')
a.seek(517) #Where the transaction number starts.
a.myfile.write(struct.pack('>I', 444444)) # myfile is the file pointer
a.myfile.tell()
521

# Now the transaction number will have been changed.

############################################

edit is translated into 'rb+' and it's handled by the super class, not the sub class. If I open three file handles to sm0.d a, b, c where a is direct, b is a dim_file, and c is a sm0 then a and b will write to it but c won't. All three say they're file objects (a or b.myfile or c.myfile) with mode 'rb+'. I've tried calling the file.flush() method and closeing the file and reopening it.

I'm absolutely stumped. Can anyone point me in the right direction?

Thanks for the help.

John Purser
 
Would be helpful to see your code, especially what is different between dim_file.py and sm0.py.

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top