Kermit Rose wrote: > Hello. > > I wish to translate a SAS data file to text, and do not have the > professional > version of SAS to do so. > > I have the student version of SAS, and have translated the shortest of 4 SAS > data sets given. > > For the other 3, I wish to construct a python program to read the > characters in, one > at a time, translate them to hexadecimal, then figure out how the data > matches > the data dictionary that I have. > > I experimented with writing code in C++ to do this. > > My first experiment, in C++ is > > #include <stdio.h> > #include <iostream> > #define TRUE 1 /* Define some handy constants */ > #define FALSE 0 /* Define some handy constants */ > ifstream f("CMT_MCAID",ios_base::binary); > ofstream G("mcaid.txt",ios_base::app); > char ch > int k > int kh,kl > int limit > limit = 1000 > > for (int I=1;I<= limit;I++) > > { > f >> ch; > k = ch; > kl = k%16; > kh = (k -kl)/16; > G << kh," ",kl," "; > } > > > How can I begin to experiment using python? What would be python code > equivalent > to the above C++ code?
Hmm, my C++ is remarkably rusty but I think you want something like this: inp = open("CMT_MCAID", "rb") out = open("mcaid.txt", "w") for i in range(1000): ch = inp.read(1) if not ch: break # EOF k = ord(ch) # convert to integer kl = k % 16 kh = k / 16 out.write('%x %x ' % (kh, kl)) out.close() If your input file will fit in memory, there is no need to read a byte at a time, you could change the for / read /test to this: for ch in inp.read()[:1000]: If you can live without the space between the two digits you could use out.write('%02x' % k) With these two changes the entire loop becomes for ch in inp.read()[:1000]: out.write('%02x' % ord(ch)) If your input files are in a well-understood format, you might be interested in the struct module in the standard lib, which will unpack fixed format binary data, or pyconstruct which I think is a bit more flexible: http://pyconstruct.wikispaces.com/ Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor