Text Processing
Heredoc Lines
A heredoc stores multiline text that can be split and processed line by line.
heredoc
A heredoc creates a multiline string while keeping the text readable in source code.
Heredoc Lines
heredoc_lines.rb
Replay: real traced execution (multi-file project)
prefix = "TODO"
notes = <<~TEXT
TODO wash
DONE fold
TODO pack
TEXT
lines = notes.lines.map do |line|
line.strip
end
selected = lines.select do |line|
line.start_with?(prefix)
end
puts "prefix=#{prefix}"
puts "line_count=#{lines.length}"
selected_text = selected.join(", ")
puts "selected=#{selected_text}"
prefix = "DONE"
notes = <<~TEXT
TODO wash
DONE fold
TODO pack
TEXT
lines = notes.lines.map do |line|
line.strip
end
selected = lines.select do |line|
line.start_with?(prefix)
end
puts "prefix=#{prefix}"
puts "line_count=#{lines.length}"
selected_text = selected.join(", ")
puts "selected=#{selected_text}"
prefix = "NOTE"
notes = <<~TEXT
TODO wash
DONE fold
TODO pack
TEXT
lines = notes.lines.map do |line|
line.strip
end
selected = lines.select do |line|
line.start_with?(prefix)
end
puts "prefix=#{prefix}"
puts "line_count=#{lines.length}"
selected_text = selected.join(", ")
puts "selected=#{selected_text}"
prefix ← TODO, notes ← TODO wash\nDONE fold\nTODO pack\n, lines ← ["TODO wash", "DONE fold", "TODO pack"]
1prefix→ TODO = "TODO" #@prefix="DONE", "NOTE"23notes→ TODO wash\nDONE fold\nTODO pack\n = <<~TEXT4 TODO wash5 DONE fold6 TODO pack7TEXT89lines→ ["TODO wash", "DONE fold", "TODO pack"] = notes(empty).lines.map do |line|10 line.strip11end1213selected→ ["TODO wash", "TODO pack"] = lines(empty).select do |line|14 line.start_with?(prefix)15end1617puts "prefix=#{prefixTODO}"18puts "line_count=#{lines.length3}"19selected_text→ TODO wash, TODO pack = selected.join(", ")TODO wash, TODO pack2021puts "selected=#{selected_textTODO wash, TODO pack}"outputprefix=TODO line_count=3 selected=TODO wash, TODO pack
prefix ← DONE, notes ← TODO wash\nDONE fold\nTODO pack\n, lines ← ["TODO wash", "DONE fold", "TODO pack"]
1prefix→ DONE = "DONE"23notes→ TODO wash\nDONE fold\nTODO pack\n = <<~TEXT4 TODO wash5 DONE fold6 TODO pack7TEXT89lines→ ["TODO wash", "DONE fold", "TODO pack"] = notes(empty).lines.map do |line|10 line.strip11end1213selected→ ["DONE fold"] = lines(empty).select do |line|14 line.start_with?(prefix)15end1617puts "prefix=#{prefixDONE}"18puts "line_count=#{lines.length3}"19selected_text→ DONE fold = selected.join(", ")DONE fold2021puts "selected=#{selected_textDONE fold}"outputprefix=DONE line_count=3 selected=DONE fold
prefix ← NOTE, notes ← TODO wash\nDONE fold\nTODO pack\n, lines ← ["TODO wash", "DONE fold", "TODO pack"]
1prefix→ NOTE = "NOTE"23notes→ TODO wash\nDONE fold\nTODO pack\n = <<~TEXT4 TODO wash5 DONE fold6 TODO pack7TEXT89lines→ ["TODO wash", "DONE fold", "TODO pack"] = notes(empty).lines.map do |line|10 line.strip11end1213selected→ [] = lines(empty).select do |line|14 line.start_with?(prefix)15end1617puts "prefix=#{prefixNOTE}"18puts "line_count=#{lines.length3}"19selected_text→ (empty) = selected.join(", ")(empty)2021puts "selected=#{selected_text(empty)}"outputprefix=NOTE line_count=3 selected=