2014-06-14 45 views
0

我正在編寫一個程序,以通過列表'隊列'傳入的文件列表。IndexError閱讀源代碼文件夾中的註釋

我試圖逐行瀏覽文件,只選擇單行註釋或多行註釋中的文本。 (「//」和「/ * * /」 - >可能位於多行)。

我無法明白爲什麼我的程序不應該在下一行時它應該。如果評論結束標記「終止」未得到滿足,變量「stepper」將增加。

我一直在錯誤測試和重新工作幾天,現在我不確定爲什麼這不起作用。

對於潦草的代碼,我很抱歉。

def main(queue): 
    for item in queue: 
     with open("output.txt", "a") as out_file: 
      out_file.write(str("\t<FILE: " + item.split("\\")[len(item.split()) - 1] + ">")) 
      java_file = list(open(item, "r")) 
      for line in range(0, len(java_file)): 
       for i in range(0, len(java_file[line])): 
        multi_builder = [] 
        single_lines = [] 
        if (java_file[line][i] == "/" and java_file[line][i + 1] == "/"): 
         single_lines.append(java_file[line][i:]) 
        if (java_file[line][i] == "/" and java_file[line][i + 1] == "*"): 
         stepper = 0 
         terminated = False 
         while not terminated: 
          for char in range(0, len(java_file[line + stepper])): 
           if not java_file[line][char].strip() == "": 
            print (java_file[line][char]) 
            if (java_file[line][char] == "*" and java_file[line][char + 1] == "/"): 
             if stepper == 0: 
              multi_builder.append(java_file[line][i:char + 1]) 
             multi_builder.append(java_file[line][:char + 1]) 
             terminated = True 
            else: 
             multi_builder.append(java_file[line]) 
             stepper += 1 
+0

這將有助於包括堆棧在問題中追蹤 – shaktimaan

+0

目前尚不清楚您認爲問題出在哪裏。 – Brionius

+1

此外,我們可以幫助您找到解決方案,無論您的問題是什麼,但它看起來像你在這裏重新發明輪子。 [正則表達式](https://docs.python.org/2/library/re.html)是爲這類事情設計的。 – Brionius

回答

1

我不知道,如果你有興趣的替代方法,而不是幫助調試你的方法,但使用regular expressions使得這一任務變得更加簡單:

import re 

singleLinePattern = re.compile("//.*$", flags=re.MULTILINE+re.DOTALL) 
multiLinePattern = re.compile("/\*.*?\*/", flags=re.MULTILINE+re.DOTALL) 

def main(queue): 
    for item in queue: 
     with open("output.txt", "a") as out_file: 
      out_file.write(str("\t<FILE: " + item.split("\\")[len(item.split()) - 1] + ">")) 
      with open(item, "r") as f: 
       java_file = f.read() 
      print "singles:", singleLinePattern.findall(java_file) 
      print "multis:", multiLinePattern.findall(java_file) 
      # You can write the results to the output file here.