![]() |
How To Find an Opening and Closing String, Copying Open/Close/Contents to New File - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: How To Find an Opening and Closing String, Copying Open/Close/Contents to New File (/thread-24733.html) |
How To Find an Opening and Closing String, Copying Open/Close/Contents to New File - davidshq - Mar-01-2020 Hi All, I want to use Python to parse some old BASIC code. Basically, I'm looking to locate each subroutine within the source file and then copy each subroutine out into a new file named after the subroutine. I imagine it would go something like this: 1. Find a string containing sub nameofsub 2. Find the matching end sub for this subroutine 3. Create a new file with the name of the subroutine. 4. Copy the contents of the opening and closing strings and all contained text into this new file. 5. Repeat from the beginning. RE: How To Find an Opening and Closing String, Copying Open/Close/Contents to New File - davidshq - Mar-03-2020 Still working through this, I've posted my code to github: https://github.com/davidshq/pyBASICTools Right now it: 1. Loads the file into a list. 2. Iterates through each item in the list. 3. If it finds the string "DECLARE SUB" outputs a message to the display. 4. Continues parsing until the entire list (and thus contents of the file) have been searched. About as far as I'm getting with it tonight...will update as I make more progress. Any suggestions are welcome :) # Python BASIC Tools # Empty List to Contain Lines of BASIC Code baslist = [] # Open Source File and Print Contents with open('/workspaces/python/pyBASICTools/CWSTRAT.BAS', 'rt') as basfile: # Copy each line into baslist. for line in basfile: baslist.append(line) # Search for instances of SUB index = 0 # current index in list prev = 0 # previous index in list while index < len(baslist): lineindex = 0 # current index in string lineprev = 0 # previous index in string str = baslist[index] # first string to search from baslines substr = "SUB animate" # substring we are looking for while lineindex < len(str): # While there are still more items in the list found = str.find(substr, lineindex) if found == -1: lineindex = lineindex + 1 break print(" " * (found - lineprev) + "e", end='') # Print location of substring lineprev = found + len(substr) lineindex += len(substr) prev = index index = index + 1 |