2011-10-28 24 views
1

매우 새로운데, 지금까지 이걸 만드는 데 약간의 도움이되었습니다. 131 번 줄에 구문 오류가 계속 발생합니다. 나는 그것이 무엇인지에 관해 정말로 확신하지 않는다. 그리고 이것을 만드는 것을 도왔던 사람은 나의 멍청이 자기에 의해 나를 시험해보고, 이것을 고치 러 갔다. 중간에 스크립트에 더 많은 것이있다. - 디 컴파일 직접 파일하지만 나는 그들을 게시 할 수 없습니다. 하지만이 "구문 오류"가 무엇인지 잘못 이해할 필요가 있습니다.이 스크립트는 무엇이 문제입니까? 정의되지 않은 구문 오류?

#o-----------------------------------------------------------------------------o 
    #(-----------------------------------------------------------------------------) 
    #|Compatible w/ Python 3.2 | 
    ######################### 
    # Configuration section # 
    ######################### 
    toptablefolder = 'C:/Games/TOP/kop/scripts/table/' 
    toptableversion = 6 
    toptableencoding = 'gbk' 
    ####end of config#### 
    import struct 
    from types import * 
    #--------------------------------------------- 
    class top_tsv: 
    name = '' 
    file_name = '' 
    list = [] 
    version = '' 

    frombin_map = [('',{'v':0})] 
    def __init__(self, file_name=0, version=0): 
     if file_name == 0: 
     self.file_name = toptablefolder+self.__class__.__name__ 
     else: 
     self.file_name = file_name 
     if (version == 0): 
     self.version = toptableversion 
     else: 
     self.version = version 
     self.list = [] 
     self.frombin_map = [('',{'v':0})] 

    def unencrypt(self): 
     item = [] 
     #Load data 
     file = open(self.file_name+'.bin', 'rb') 
     data = bytearray(file.read()) 
     file.close() 

     i = 0 
     array_size = int(list(struct.unpack_from('<i',data[i:i+4]))[0]) 
     rdata = data[i:i+4] 
     data = data[i+4:len(data)] 
     m = 0 
     k = 0 
     l = len(data)//array_size 

     #2.2 encryption 
     if ((self.version >= 5) and ((self.__class__.__name__ != 'magicsingleinfo') and (self.__class__.__name__ != 'magicgroupinfo') and (self.__class__.__name__ != 'resourceinfo') and (self.__class__.__name__ != 'terraininfo'))): 
     newbytes = bytes.fromhex('98 9D 9F 68 E0 66 AB 70 E9 D1 E0 E0 CB DD D1 CB D5 CF') 
     while(k<l): 
     item = data[i:i+array_size] 
     i = i+array_size 
     if ((self.version >= 5) and ((self.__class__.__name__ != 'magicsingleinfo') and (self.__class__.__name__ != 'magicgroupinfo') and (self.__class__.__name__ != 'resourceinfo') and (self.__class__.__name__ != 'terraininfo'))): 
      for m,c in enumerate(item): 
      j = m % len(newbytes) 
      item[m] = ((item[m] - newbytes[j]) + 256) % 256 
     rdata = rdata + item 
     k = k + 1 
     m = 0 
     file = open(self.file_name+'-un.bin', 'wb') 
     file.write(rdata) 
     file.close() 

    def load_bin_data(self): 
     array = [] 
     item = [] 
     addresses = [] 
     #Load structure (calculate size) 

     struct_type_map={ 
     "char":"c", 
     "byte":"b", 
     "ubyte":"B", 
     "_bool":"?", 
     "short":"h", 
     "ushort":"H", 
     "int":"i", 
     "uint":"I", 
     "long":"l", 
     "ulong":"L", 
     "quad":"q", 
     "uquad":"Q", 
     "float":"f", 
     "double":"d", 
     "str":"s", 
     "color":"B", 
     "rcolor":"B", 
     } 
     struct_vars = {'t':'','s':1,'l':1,'stp':1,'f':-1,'v':-1,'lpad':0,'rpad':0,'sa':-1,'sap':-1,'ea':-1,'eap':-1,'st':'','lm':0,'sm':0,'smb':0,'smea':0,'sv':0,'func':0} 
     #initialize addresses 
     struct_init_address = 0 
     struct_limit_address = 0 
     struct_marked_addresses = [0,0,0,0,0,0] 
     struct_func_indexes = [] 

     for i, v in enumerate(list(zip(*self.frombin_map))[1]): 
     struct_item = struct_vars.copy() 
     struct_item.update(v) 
     if struct_item['smb']>=1: 
      struct_marked_addresses[struct_item['smb']] = struct_init_address 
     if struct_item['lm']>=1: 
      struct_init_address = struct_marked_addresses[struct_item['lm']] 
     if struct_item['sm']>=1: 
      struct_marked_addresses[struct_item['sm']] = struct_init_address 
     if (type(struct_item['func']) == FunctionType): 
      struct_func_indexes.append(i) 
     elif (struct_item['v'] == -1): 
      if type(struct_item['t']) == tuple: 
      struct_item['s'] = len(struct_item['t']) 
      struct_item['st'] = [] 
      for j,t in enumerate(struct_item['t']): 
      struct_item['st'].append(struct_type_map[struct_item['t'][j]]) 
      struct_item['st'] = tuple(struct_item['st']) 
      struct_item['s'] = len(struct_item['st']) 
      else: 
      struct_item['st'] = struct_type_map[struct_item['t']] 
      if ((struct_item['t'] == 'color') or (struct_item['t'] == 'rcolor')): 
      struct_item['s'] = 3 
      struct_item['sa'] = struct_init_address 
      struct_item['sap'] = struct_item['sa'] + struct_item['lpad'] 
      struct_item['ea'] = struct_item['sap'] 
      if type(struct_item['t']) == tuple: 
      for j,t in enumerate(struct_item['t']): 
      struct_item['ea'] = struct_item['ea'] + struct.calcsize(struct_item['st'][j]) * ((struct_item['stp'] * struct_item['l'])-(struct_item['stp']-1)) 
      else: 
      struct_item['ea'] = struct_item['ea'] + struct.calcsize(struct_item['st']) * ((struct_item['s'] * struct_item['stp'] * struct_item['l'])-(struct_item['stp']-1)) 
      if struct_item['smea']>=1: 
      struct_marked_addresses[struct_item['smea']] = struct_item['ea'] 
      struct_item['eap'] = struct_item['ea'] + struct_item['rpad'] 
      struct_init_address = struct_item['eap'] 
      if (struct_init_address > struct_limit_address): 
      struct_limit_address = struct_init_address 
      #print(struct_item) 

     self.frombin_map[i] = (self.frombin_map[i][0],struct_item) 
     struct_size = struct_limit_address 

     #Load data 
     file = open(self.file_name+'.bin', 'rb') 
     data = bytearray(file.read()) 
     file.close() 

     i = 0 
     k = 0 
     array_size = int(list(struct.unpack_from('<i',data[i:i+4]))[0]) 
     if array_size != struct_size: 
     print(self.file_name+'.bin: Actual array size ('+str(array_size)+') doesn''t match structure size ('+str(struct_size)+')') 
     raise 'Size error.' 
     data = data[i+4:len(data)] 
     m = 0 
     k = 0 
     l = len(data)//struct_size 

     #2.2 encryption 
     if ((self.version >= 5) and ((self.__class__.__name__ != 'magicsingleinfo') and (self.__class__.__name__ != 'magicgroupinfo') and (self.__class__.__name__ != 'resourceinfo') and (self.__class__.__name__ != 'terraininfo'))): 
     newbytes = bytes.fromhex('98 9D 9F 68 E0 66 AB 70 E9 D1 E0 E0 CB DD D1 CB D5 CF') 
     while(k<l): 
     item = data[i:i+struct_size] 
     i = i+struct_size 
     if ((self.version >= 5) and ((self.__class__.__name__ != 'magicsingleinfo') and (self.__class__.__name__ != 'magicgroupinfo') and (self.__class__.__name__ != 'resourceinfo') and (self.__class__.__name__ != 'terraininfo'))): 
      for m,c in enumerate(item): 
      j = m % len(newbytes) 
      item[m] = ((item[m] - newbytes[j]) + 256) % 256 
     array.append(item) 
     k = k + 1 
     m = 0 

     #Associate the data with the structure 
     self.list = [] 
     self.list.append(list(zip(*self.frombin_map))[0]) 
     for y,rawrow in enumerate(array): 
     row = [] 
     for x,cell_struct in enumerate(list(zip(*self.frombin_map))[1]): 
      if type(cell_struct['func']) == FunctionType: 
      cell = [] 
      cell.append('0') 
      row.append(self.transformtostr(cell,**cell_struct)) 
      else: 
      cell = [] 
      if (cell_struct['v'] == -1): 
      i = cell_struct['sap'] 
      for j in range(cell_struct['l']): 
      processed_data=list(struct.unpack_from('<'+str((cell_struct['s']//len(cell_struct['st']))*cell_struct['stp'])+"".join(cell_struct['st']),rawrow,i))[::cell_struct['stp']] 
      #if (x == 4) and (y == 70): 
      # #print(cell_struct['s']) 
      cell.append(processed_data) 
      i=i+cell_struct['s']*struct.calcsize("".join(cell_struct['st']))*cell_struct['stp'] #sizeof here 
      if (cell_struct['t'] == 'rcolor'): 
      cell[0].reverse() 
      else: 
      cell.append(cell_struct['v']) 
      #if y == 70: 
      # print(cell) #'s':0x02,'l':0x08 
      row.append(self.transformtostr(cell,**cell_struct)) 
     self.list.append(row) 
     for x,row in enumerate(self.list): 
     if x>0: 
      for func_index in struct_func_indexes: 
      self.list[x][func_index] = list(zip(*self.frombin_map))[1][func_index]['func'](func_index, row) 

      deletions = 0 
      for z,struct_item_name in enumerate(list(zip(*self.frombin_map))[0]): 
      if (struct_item_name == ''): 
      del self.list[x][z-deletions] 
      deletions = deletions + 1 
     return 
    def i(self,x): 
     for i,v in enumerate(self.list): 
     if(x==v): 
      return i 
      break 
     return -1 
    def j(self,x): 
     for i,v in enumerate(list(zip(*self.frombin_map))[0]): 
     if(x==v): 
      return i 
      break 
     return -1 
    def remap(self,v): 
     for i,n in enumerate(list(zip(*v))[0]): 
     if self.j(n) == -1: 
      self.frombin_map.append((list(zip(*v))[0][i],list(zip(*v))[1][i])) 
     else: 
      if (list(zip(*v))[1][i] == {}): 
      del self.frombin_map[self.j(n)] 
      else: 
      self.frombin_map[self.j(n)] = (list(zip(*v))[0][i],list(zip(*v))[1][i]) 
    def bintotsv(self): 
     file = open(self.file_name+'.txt', 'wt', encoding=toptableencoding) 
     for i,a in enumerate(self.list): 
     a=list(a) 
     if (i==0): 
      deletions = 0 
      for z,item in enumerate(a[:]): 
      if (item == ''): 
      del a[z-deletions] 
      deletions = deletions + 1 
      file.write('//'+'\t'.join(a)) 
     else: 
      #print(a) 
      file.write('\n'+'\t'.join(a)) 
     file.close() 
     return self 
     def trim_nullbytestr(string, flag=0): #flag=1, return "0" when string is empty 
     result = string 
     for i,byte in enumerate(string[:]): 
      if byte == '\00': 
      result = string[:i] 
      break 
     if (flag & 1) and ((string == '\00') or (string == '')): 
      result = '0' 
     return result 
    def transformtostr(self,result,t,s,l,stp,f,v,ea,eap,lpad,rpad,sa,sap,st,sm,lm,smb,smea,sv,func): 
     if v != -1: 
     return str(v) 
     _type = t 
     j = 0 
     for n,v in enumerate(result[:]): 
     m = 0 
     if type(t) == tuple: 
      _type = t[j] 
     is_integer = not((_type=="float") or (_type=="double") or (_type=="str") or (_type=="char") or (_type=="_bool")) 
     if is_integer: 
      if f==-1: 
      f=0 
     for k,w in enumerate(v[:]): 
      if is_integer: 
      #Result: flag=0x0001 = remove FF's, #flag=0x0002 = cut file defect bytes, #flag=0x0004 = remove 0's 
      if ((((f & 0x4) and (w == 0))) or 

      ((f & 0x1) and ((w == (2**8)-1) or (w == (2**16)-1) or (w == (2**32)-1) or (w == (2**64)-1) or (w == -1))) or 
      ((f & 0x2) and ((((_type=="byte") or (_type=="ubyte")) and (w == (2**8)-51)) or (((_type=="short") or (_type=="ushort")) and (w == (2**16)-12851)) or (((_type=="long") or (_type=="ulong")) and (w == (2**32)-842150451)) or (((_type=="quad") or (_type=="uquad")) and (w == (2**64)-3617008641903833651))))): 
      del result[j][m] 
      m=m-1 
      else: 
      if (f & 0x2 and w == 0): 
      result[j] = result[j][:m] 
      break 
      result[j][m]=str(result[j][m]) 
      m=m+1 
      if (_type=="float"): 
      if f==-1: 
      f=3 
      result[j][k]=str(round(float(w),f)) 
      if (_type=="str"): 
      if f==-1: 
      f=0 
      if (w[0] == 205) and (w[1] == 205): 
      result[j][m] = '' 
      else: 
      result[j][m] = w.decode('gbk','ignore') 
      for o,x in enumerate(result[j][m]): 
      if x == '\00': 
      result[j][m] = result[j][m][:o] 
      break 
      #result[j][m] = result[j][m].strip() 
      if ((f & 1) and (result[j][m] == '')): 
      result = '0' 
     if (result[j] != '0'): 
      result[j] = ','.join(result[j]) 
     if is_integer: 
      if (result[j] == ''): 
      result[j] = '0' 
     j=j+1 
     if (_type=="str"): 
     result = ','.join(result) 
     if ((f & 1) and (result == '')): 
      result = '0' 
     else: 
     result = ';'.join(result) 
     if is_integer: 
     if (result == ''): 
      result = '0' 
     return result 
] 
for c in toptablebins: 
myc = c() 
try: 
    myc.load_bin_data() 
except IOError: 
    print('"'+myc.file_name+'.bin'+'" doesn''t exist, skipping...') 
myc.bintotsv() 

은 몇 줄 아래 에러

for j,t in enumerate(struct_item['t']): 
    struct_item['st'].append(struct_type_map[struct_item['t'][j]]) 
    struct_item['st'] = tuple(struct_item['st']) 
    struct_item['s'] = len(struct_item['st']) 
    else: <--- this is 131 
    struct_item['st'] = struct_type_map[struct_item['t']] 
    if ((struct_item['t'] == 'color') or (struct_item['t'] == 'rcolor')): 
    struct_item['s'] = 3 
    struct_item['sa'] = struct_init_address 
    struct_item['sap'] = struct_item['sa'] + struct_item['lpad'] 
    struct_item['ea'] = struct_item['sap'] 
    if type(struct_item['t']) == tuple: 
    for j,t in enumerate(struct_item['t']): 
    struct_item['ea'] = struct_item['ea'] + struct.calcsize(struct_item['st'][j]) * ((struct_item['stp'] * struct_item['l'])-(struct_item['stp']-1)) 
+0

코드가 너무 많습니다. 오류 및 줄은 무엇입니까? – birryree

+2

은 _exact_ 오류 메시지, 오류가 표시되는 줄 및 위와 아래 몇 줄을 표시합니다. –

답변

1

그것은 당신이 적절한 들여 쓰기를 가지고있는 것처럼 보이지 않는에게 인 131 위입니다. Python에서는 공백이 매우 중요하다는 것을 기억하십시오. 이것은 조금 이상한 것 같다

 elif (struct_item['v'] == -1): 
      if type(struct_item['t']) == tuple: 
       struct_item['s'] = len(struct_item['t']) 
       struct_item['st'] = [] 
       for j,t in enumerate(struct_item['t']): 
        struct_item['st'].append(struct_type_map[struct_item['t'][j]]) 
        struct_item['st'] = tuple(struct_item['st']) 
        struct_item['s'] = len(struct_item['st']) 
+0

@Matthew 감사합니다. –

0

: 코드의

문제의 부분은 아마 뭔가를 찾기 시작한다

l = len(data)//struct_size 

당신은 정말 인터프리터가 당신을주고있다 역 추적을 게시해야합니다 - 오류를 찾는 것이 훨씬 쉬워집니다.

+0

ErrorLine 131 else : ^ SyntaxError : invalid syntax –

+0

@JakeDewit : 감사합니다. 케이시 (Casey)의 질문에 대한 답변은이 경우 가장 정확합니다 (그러나 //는 아직 문제 일 수 있음). –

+0

@Casey 고맙다. 그 부분을 해결 해줘서 고맙습니다.하지만 지금은 194 행의 유효하지 않은 구문으로 되돌아갑니다. 단순히 간격 문제입니까? –