71 lines
1.7 KiB
Plaintext
71 lines
1.7 KiB
Plaintext
|
#!/usr/bin/env python3
|
||
|
|
||
|
import sys
|
||
|
import struct
|
||
|
import re
|
||
|
|
||
|
def print_usage():
|
||
|
print("usage: convert_bin <bin2txt|txt2bin> <input_file> <output_file> <K>")
|
||
|
|
||
|
if len(sys.argv)!=5:
|
||
|
print_usage()
|
||
|
sys.exit(-1)
|
||
|
|
||
|
if sys.argv[1]=="bin2txt":
|
||
|
direction="bin2txt"
|
||
|
elif sys.argv[1]=="txt2bin":
|
||
|
direction="txt2bin"
|
||
|
else:
|
||
|
print_usage()
|
||
|
sys.exit(-1)
|
||
|
|
||
|
if direction=="txt2bin":
|
||
|
inf=open(sys.argv[2],"r")
|
||
|
out=open(sys.argv[3],"wb")
|
||
|
elif direction=="bin2txt":
|
||
|
inf=open(sys.argv[2],"rb")
|
||
|
out=open(sys.argv[3],"w")
|
||
|
|
||
|
K=int(sys.argv[4])
|
||
|
|
||
|
counter=0
|
||
|
|
||
|
if direction=="txt2bin":
|
||
|
# read
|
||
|
entries={}
|
||
|
for line in inf.readlines():
|
||
|
# remove double spaces
|
||
|
line=re.sub(' *',' ',line)
|
||
|
# remove initial spaces
|
||
|
line=re.sub('^ ','',line)
|
||
|
nums=line.split(" ")
|
||
|
kx=int(nums[0])
|
||
|
ky=int(nums[1])
|
||
|
Re=float(nums[2])
|
||
|
im=float(nums[3])
|
||
|
entries[str(kx)+","+str(ky)]=[Re,im]
|
||
|
# write
|
||
|
for kx in range(0,K+1):
|
||
|
for ky in range(-K,K+1):
|
||
|
# ignore kx<0
|
||
|
if (kx>0 or (kx==0 and ky>0)):
|
||
|
# print if exists
|
||
|
if str(kx)+","+str(ky) in entries:
|
||
|
out.write(struct.pack('dd',entries[str(kx)+","+str(ky)][0],entries[str(kx)+","+str(ky)][1]))
|
||
|
else:
|
||
|
# otherwise 0
|
||
|
out.write(struct.pack('dd',0.,0.))
|
||
|
|
||
|
|
||
|
elif direction=="bin2txt":
|
||
|
for kx in range(0,K+1):
|
||
|
for ky in range(-K,K+1):
|
||
|
# ignore kx<0
|
||
|
if (kx>0 or (kx==0 and ky>0)) :
|
||
|
entry=struct.unpack('dd',inf.read(16))
|
||
|
print(kx,ky,entry[0],entry[1],file=out)
|
||
|
|
||
|
inf.close()
|
||
|
out.close()
|
||
|
|