Search code examples
tclexpect

String literal with line breaks in Tcl


I want to have a string in my source code that consists of multiple lines (i.e contains LF characters).

The solution should:

  1. Put each data line on a separate source line.
    # Bad:
    set lines "line 1\nline 2\nline 3"
    
  2. Not add empty leading or trailing lines:
    # Bad:
    set lines {
    line 1
    line 2
    line 3
    }
    puts [split $lines \n]
    # Prints: {} {line 1} {line 2} {line 3} {}
    
  3. Not have hanging lines:
    # Bad:
    set lines {line 1
    line 2
    line 3}
    

What I have came up with so far:

set lines {
line 1
line 2
line 3
}
set lines [string range $lines 1 end-1]

Is there a better way?


Solution

  • What about:

    % set lines [join [list {*}{
       "line 1"
       "line 2"
       "line 3"
    }] \n]
    % split $lines \n
    {line 1} {line 2} {line 3}