On Oct 31, 5:02 pm, Gustaf <[EMAIL PROTECTED]> wrote: > Hi all, > > Just for fun, I'm working on a script to count the number of lines in source > files. Some lines are auto-generated (by the IDE) and shouldn't be counted. > The auto-generated part of files start with "Begin VB.Form" and end with > "End" (first thing on the line). The "End" keyword may appear inside the > auto-generated part, but not at the beginning of the line. > > I imagine having a flag variable to tell whether you're inside the > auto-generated part, but I wasn't able to figure out exactly how. Here's the > function, without the ability to skip auto-generated code: > > # Count the lines of source code in the file > def count_lines(f): > file = open(f, 'r') > rows = 0 > for line in file: > rows = rows + 1 > return rows > > How would you modify this to exclude lines between "Begin VB.Form" and "End" > as described above?
First, your function can be written much more compactly: def count_lines(f): return len(open(f, 'r')) Anyway, to answer your question, write a function that omits the lines you want excluded: def omit_generated_lines(lines): in_generated = False for line in lines: line = line.strip() in_generated = in_generated or line.starts_with('Begin VB.Form') if not in_generated: yield line in_generated = in_generated and not line.starts_with('End') And count the remaining ones... def count_lines(filename): return len(omit_generated_lines(open(filename, 'r'))) -- Paul Hankin -- http://mail.python.org/mailman/listinfo/python-list