Version 7 of HOW TO - Splice lines of source code

Updated 2007-11-01 20:49:46 by tomk

While working on a tcl implementation of a cpp (i.e. C preprocessor) I found it necessary to splice together lines with escaped new lines while preserving the line number where the splice began.

Given a file of source lines that look like the following.

line(1)
line(2)\
line(3) with space after excape\    
line(4)\
line(5)
line(6)\
line(7)
line(8)

This code ...

set fid [open [file normalize "./filename"] r]
set text [read ${fid}]
close $fid
regsub -all -- {[\\][ \t]*[\n]} ${text} "\\\n" text
while { [regsub -all -- {[\\][\n](.*?[^\\])[\n]} ${text} "\\1\n\n" text] } {}

produces the following results (line number were added).

no.output
1 line(1)2|line(2)line(3) with space after excapeline(4)line(5)
3
4
5
6line(6)line(7)
7
8line(8)

Notice that the lines have been spliced together and the spliced lines occur on the correct line in the output.

Tom Krehbiel


Category File