Align columns: Difference between revisions
Content added Content deleted
Underscore (talk | contribs) (Added Common Lisp.) |
|||
Line 746: | Line 746: | ||
justified, right justified, or center justified within its column. |
justified, right justified, or center justified within its column. |
||
</pre> |
</pre> |
||
=={{header|Tcl}}== |
|||
<lang tcl>package require Tcl 8.5 |
|||
set text {Given$a$text$file$of$many$lines,$where$fields$within$a$line$ |
|||
are$delineated$by$a$single$'dollar'$character,$write$a$program |
|||
that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$ |
|||
column$are$separated$by$at$least$one$space. |
|||
Further,$allow$for$each$word$in$a$column$to$be$either$left$ |
|||
justified,$right$justified,$or$center$justified$within$its$column.} |
|||
array set max {} |
|||
foreach line [split $text \n] { |
|||
set col 0 |
|||
set thisline [split $line \$] |
|||
lappend words $thisline |
|||
foreach word $thisline { |
|||
set max([incr col]) [expr {[info exists max($col)] |
|||
? max($max($col), [string length $word]) |
|||
: [string length $word] |
|||
}] |
|||
} |
|||
} |
|||
proc justify {word position width} { |
|||
switch -exact -- $position { |
|||
left { |
|||
return [format "%-*s" $width $word] |
|||
} |
|||
center { |
|||
set lpadw [expr {($width - [string length $word])/2}] |
|||
return [format "%s%-*s" [string repeat " " $lpadw] [incr width -$lpadw] $word] |
|||
} |
|||
right { |
|||
return [format "%*s" $width $word] |
|||
} |
|||
} |
|||
} |
|||
foreach position {left center right} { |
|||
foreach thisline $words { |
|||
set col 0 |
|||
set line "" |
|||
foreach word $thisline { |
|||
append line [justify $word $position $max([incr col])] " " |
|||
} |
|||
puts [string trimright $line] |
|||
} |
|||
puts "" |
|||
}</lang> |
|||
Output: |
|||
<pre>Given a text file of many lines, where fields within a line |
|||
are delineated by a single 'dollar' character, write a program |
|||
that aligns each column of fields by ensuring that words in each |
|||
column are separated by at least one space. |
|||
Further, allow for each word in a column to be either left |
|||
justified, right justified, or center justified within its column. |
|||
Given a text file of many lines, where fields within a line |
|||
are delineated by a single 'dollar' character, write a program |
|||
that aligns each column of fields by ensuring that words in each |
|||
column are separated by at least one space. |
|||
Further, allow for each word in a column to be either left |
|||
justified, right justified, or center justified within its column. |
|||
Given a text file of many lines, where fields within a line |
|||
are delineated by a single 'dollar' character, write a program |
|||
that aligns each column of fields by ensuring that words in each |
|||
column are separated by at least one space. |
|||
Further, allow for each word in a column to be either left |
|||
justified, right justified, or center justified within its column.</pre> |
|||
=={{header|Vedit macro language}}== |
=={{header|Vedit macro language}}== |