44 lines
3.5 KiB
Text
44 lines
3.5 KiB
Text
Public Sub Main() 'Written in Gambas 3.9.2 as a Command line Application - 15/03/2017
|
|
Dim siCount, siCounter, siLength As Short 'Counters
|
|
Dim siLongest As Short = -1 'To store the longest 'Word'
|
|
Dim sLine, sRows As New String[] 'Arrays
|
|
Dim sTemp, sAlign As String 'Temp strings
|
|
Dim sInput As String = "Given$a$text$file$of$many$lines, $where$fields$within$a$line$" & "\n"
|
|
"are$delineated$by$a$single$ 'dollar'$character,$write$a$program" & "\n"
|
|
"that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$" & "\n"
|
|
"column$are$separated$by$at$least$one$space." & "\n"
|
|
"Further, $allow$for$each$word$in$a$column$to$be$either$left$" & "\n"
|
|
"justified, $right$justified, $or$center$justified$within$its$column." 'Main string (with End Of Line characters added)
|
|
|
|
For Each sTemp In Split(sInput, "\n") 'For each Line (split by End of Line character)..
|
|
sLine.add(sTemp) 'Add the Line to sLine array
|
|
Next
|
|
|
|
For siCount = 0 To sLine.Max 'For each of Lines in the array..
|
|
For Each sTemp In Split(sLine[siCount], "$") 'For each 'Word' in the Line (Split by the '$')
|
|
siLength = Len(sTemp) 'Store the length of the current 'Word'
|
|
If siLength > siLongest Then siLongest = siLength 'Make sure siLength has the length of the longest 'Word'
|
|
sRows.add(Trim(sTemp)) 'Create an array of the 'Words'
|
|
Next
|
|
sRows.add("\n") 'Add a End Of Line character to the sRows array
|
|
Next
|
|
|
|
For siCounter = 0 To 2 'For each alignment (Left, Right and Centre)
|
|
For Each sTemp In sRows 'For each 'Word' in the sRows array..
|
|
If sTemp = "\n" Then 'If it's a End Of Line character then..
|
|
Print 'Print
|
|
Continue 'Jump to the next iteration of the For Next Loop
|
|
Endif
|
|
If siCounter = 0 Then Print sTemp & Space(siLongest - Len(sTemp)); 'Print control for Left align
|
|
If siCounter = 1 Then Print Space(siLongest - Len(sTemp)) & sTemp; 'Print control for Right align
|
|
If siCounter = 2 Then 'Print control for Centre align
|
|
siCount = (siLongest - Len(sTemp)) / 2 'Difference between the length of the longest 'Word' and the current 'Word' / 2
|
|
sAlign = Space(siCount) & sTemp & Space(siCount) 'Put the string together for printing
|
|
If Len(sAlign) < siLongest Then sAlign &= " " 'Check it's the correct length if not add a space on the end
|
|
Print sAlign; 'Print the 'Word'
|
|
Endif
|
|
Next
|
|
Print 'Print an empty line between each alignment list
|
|
Next
|
|
|
|
End
|