代码改变世界

格式化代码

2017-04-04 20:50  雄风狂飙  阅读(93)  评论(0)    收藏  举报

机器学习兴起,python火热了起来。最近在学习。

正好有一个需要格式化c++代码的活要干,就用python试一下。

目前版本是一个很简单的,只是进行了 缩进4个空格的处理。详见代码.

class Stack:
    def __init__(self,stack):
        self.stack = stack
        self.size=0
    def pop(self):
        elem={}
        if self.size > 0:
            elem = self.stack[-1]
            self.stack.remove(self.stack[-1])
            self.size -= 1
        return elem  
    def push(self,elem):
        #print(self.size)
        #print(elem)
        self.stack.append(elem)
        self.size += 1
        #print(self.stack)
    def reverseSt(self):
        self.stack.reverse()
        #print(self.stack)
    def getSize(self):
        return self.size
def beautyCode():
    infileName = input("pls input the file name with path:")
    fileLine = int( input("pls input the file lines:") )
    outfileName = input("pls input the new file name with path:")

    #infileName = 'g:/t.txt'
    #fileLine = 25
    #outfileName = 'g:/ts.txt'
    
    infile = open(infileName,'r')
    lines = [ line.lstrip() for line in infile]
    infile.close()
    i = 0;
    while i < len(lines):
        #print(lines[i])
        i += 1
    stack = []
    st = Stack(stack)
    i=0
    dit={}
    while i < len(lines):
        if '{' in lines[i]:
            dit = {"{":i+1}
        elif '}' in lines[i]:
            dit = {"}":i+1}
        else:
            i+=1
            continue
        i+=1
        st.push(dit)
    st.reverseSt()
    lineStart = 0
    lineEnd = 0
    spacecount = 0

    outfile = open(outfileName,'w')
    
    tp = st.pop()
    lineEnd = list(tp.values())[0]
    while lineStart < lineEnd:
        strValue = " "*spacecount + lines[lineStart]
        outfile.write(strValue)
        lineStart += 1
    spacecount += 4
    while st.getSize() > 0:
        tp = st.pop()
        lineEnd = list( tp.values() )[0]
        while lineStart < lineEnd:
            strValue = ""
            if '}' in lines[lineStart]:
                strValue = " "*(spacecount-4) + lines[lineStart]
            else:
                strValue = " "*spacecount + lines[lineStart]
            if lines[lineStart].count('\n') == len(lines[lineStart]):
                lineStart += 1
                continue
            outfile.write(strValue)
            
            lineStart += 1
        
        if list(tp.keys())[0] == '{':
            spacecount += 4
        elif list(tp.keys())[0] == '}':
            spacecount -= 4
    outfile.flush()
    outfile.close()
            

    
            
    
def main():
    beautyCode()

main()