How to resolve the algorithm Align columns step by step in the PureBasic programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Align columns step by step in the PureBasic programming language

Table of Contents

Problem Statement

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. Use the following text to test your programs:

Note that:

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Align columns step by step in the PureBasic programming language

Source code in the purebasic programming language

Declare max(a,b)

If OpenConsole()
  Define a, i, x, y, maxlen
  Dim txt.s(0)
  Restore lines             ; Get address of the first data block 
  Read.i  a
  ReDim txt(a)
  For i=0 To a              ; Read the raw data lines
    Read.s txt(i)
    txt(i)=Trim(txt(i),"$") ; Remove any bad '$' that may be useless in the end...
    x=max(CountString(txt(i),"$"),x)
  Next
  y=a
  Dim matrix.s(x,y)         ; Set up a nice matrix to work with, each word cleanly separated
  For x=0 To ArraySize(matrix(),1)
    For y=0 To ArraySize(matrix(),2)
      matrix(x,y)=StringField(txt(y),x+1,"$")
      maxlen=max(maxlen,Len(matrix(x,y)))
    Next
  Next
  If maxlen%2
    maxlen+1                ; Just to make sure that 'centered' output looks nice....
  EndIf
  
  PrintN(#CRLF$+"---- Right ----")
  For y=0 To ArraySize(matrix(),2)
    For x=0 To ArraySize(matrix(),1)
      Print(RSet(matrix(x,y),maxlen+1))
    Next
    PrintN("")
  Next
  
  PrintN(#CRLF$+"---- Left ----")
  For y=0 To ArraySize(matrix(),2)
    For x=0 To ArraySize(matrix(),1)
      Print(LSet(matrix(x,y),maxlen+1))
    Next
    PrintN("")
  Next
  
  PrintN(#CRLF$+"---- Center ----")
  For y=0 To ArraySize(matrix(),2)
    For x=0 To ArraySize(matrix(),1)
      a=maxlen-Len(matrix(x,y))
      Print(LSet(RSet(matrix(x,y),maxlen-a/2),maxlen))
    Next
    PrintN("")
  Next
  
  PrintN(#CRLF$+#CRLF$+"Press ENTER to quit."): Input()
  CloseConsole()
EndIf


Procedure max(x,y)
  If x>=y
    ProcedureReturn x
  Else
    ProcedureReturn y
  EndIf
EndProcedure


DataSection
lines:
  Data.i  5 ; e.g. 6-1 since first line is equal to 'zero'.
text:
  Data.s "Given$a$text$file$of$many$lines,$where$fields$within$a$line$"
  Data.s "are$delineated$by$a$single$'dollar'$character,$write$a$program"
  Data.s "that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$"
  Data.s "column$are$separated$by$at$least$one$space."
  Data.s "Further,$allow$for$each$word$in$a$column$oo$be$either$left$"
  Data.s "justified,$right$justified,$or$center$justified$within$its$column."
EndDataSection

  

You may also check:How to resolve the algorithm Substring step by step in the Euphoria programming language
You may also check:How to resolve the algorithm Scope modifiers step by step in the Eiffel programming language
You may also check:How to resolve the algorithm Hello world/Text step by step in the HLA programming language
You may also check:How to resolve the algorithm Map range step by step in the Craft Basic programming language
You may also check:How to resolve the algorithm Best shuffle step by step in the BASIC programming language