55 lines
1.6 KiB
Plaintext
55 lines
1.6 KiB
Plaintext
import "io" for File
|
|
import "./fmt" for Fmt
|
|
|
|
var LEFT = 0
|
|
var RIGHT = 1
|
|
var CENTER = 2
|
|
var justStrs = ["LEFT", "RIGHT", "CENTER"]
|
|
|
|
// Gets a list of lines in the file with each line split into fields.
|
|
var getLines = Fn.new { |fileName|
|
|
var contents = File.read(fileName)
|
|
var lines = contents.split("\n") // use "\r\n" on Windows
|
|
for (i in 0...lines.count) {
|
|
lines[i] = lines[i].trim().trimEnd("$")
|
|
if (lines[i] == "") { // get rid of final blank line, if any
|
|
lines = lines[0..-2]
|
|
break
|
|
}
|
|
lines[i] = lines[i].split("$")
|
|
}
|
|
return lines
|
|
}
|
|
|
|
var alignCols = Fn.new { |lines, just|
|
|
// find maximum number of columns
|
|
var nCols = lines.reduce(0) { |acc, line| (line.count > acc) ? line.count : acc }
|
|
// find maximum width for each column
|
|
var maxWids = List.filled(nCols, 0)
|
|
for (line in lines) {
|
|
for (i in 0...line.count) {
|
|
var width = line[i].count
|
|
if (width > maxWids[i]) maxWids[i] = width
|
|
}
|
|
}
|
|
System.print("With %(justStrs[just]) justification:")
|
|
for (line in lines) {
|
|
for (i in 0...line.count) {
|
|
var width = maxWids[i] + 1
|
|
if (just == LEFT) {
|
|
System.write(Fmt.s(-width, line[i]))
|
|
} else if (just == RIGHT) {
|
|
System.write(Fmt.s(width, line[i]))
|
|
} else if (just == CENTER) {
|
|
System.write(Fmt.m(width, line[i]))
|
|
}
|
|
}
|
|
System.print()
|
|
}
|
|
System.print()
|
|
}
|
|
|
|
var fileName = "align_cols.txt"
|
|
var lines = getLines.call(fileName)
|
|
for (i in 0..2) alignCols.call(lines, i)
|