[Gambas-user] COBOL and how great it was!

BB adamnt42 at gmail.com
Sat Nov 19 03:45:10 CET 2022


Well, it turned out to be simple!

On 19/11/22 11:47 am, Jussi Lahtinen wrote:
> I see... you can use tabs this way:
> Print Cust.ID & gb.Tab & Cust.Name & gb.Tab & Cust.Balance & gb.Tab & 
> Cust.Phone
>
> Many tabs by String(n, gb.Tab). Not very handy though. I think it is 
> best to write your own function to show things neatly.
> See here to learn how to take variable amount of parameters: 
> http://gambaswiki.org/wiki/comp/gb/param 
> <http://gambaswiki.org/wiki/comp/gb/param>
>
> This would be a nice feature... but I can do it only with C.
> Print [0,6,50,70], Cust.ID, Cust.Name, Cust.Balance, Cust.Phone
>
>
> Jussi
>
>

Public Sub Main()

   PrintF([0, 6, 30, 45, 60, 132], "ACCT", "NAME", "BALANCE", "PHONE", "DUE")
   PrintF([0, 6, 30, 45, 60, 132], String(5, "_"), String(23, "_"), String(45 - 31, "_"), String(60 - 45 - 1, "_"), String(22, "_"))
   PrintF([0, 6, 30, 45, 60, 132], 12345, "Doris Day", Format(45.67, "$#.00"), "N/A", Now())
   PrintF([0, 6, 30, 45, 60, 132], 145, "Michaelango Vesputti", Format(125.67, "$#.00"), "", Date(Now() - 1))
   PrintF([0, 6, 30, 45, 60, 132], 45, "Bozo Dog", Format(5.60, "$#.00"), "Woof", Null)
   PrintF([0, 6, 30, 45, 60, 132], 666, "The Devil Incarnate Himself", Format(-66666, "($,#.00"), "0666-666-666", Date(666))
   PrintF([0, 6, 30, 45, 60, 132], 427, "Jim Bo", Format(75.5, "$#.00"), "0416-763-274", Date(2023, 5, 1, 12, 30))
   
End

Private Sub PrintF(fmt As Integer[], ...)

   Dim idx As Integer
   Dim iPad As Integer ' the number of spaces to add
   
   If Param.Count > (fmt.Count - 1) Then Error.Raise("Mismatched format")
   
   For idx = 0 To Param.Max
     If Len(Str(Param[idx])) >= fmt[idx + 1] - fmt[idx] Then
       Print Left(Str(Param[idx]), fmt[idx + 1] - fmt[idx] - 1); "…";
     Else
       iPad = (fmt[idx + 1] - fmt[idx]) - Len(Str(Param[idx]))
       If ipad < 0 Then Print "¿";
       Print Param[idx];
       If idx < Param.Max Then Print String(iPad, " ");
     Endif
   Next
   Print

End

Yields

ACCT  NAME                    BALANCE        PHONE          DUE
_____ _______________________ ______________ ______________ ______________________
12345 Doris Day               $45.67         N/A            19/11/2022 13:04:09
145   Michaelango Vesputti    $125.67                       18/11/2022 00:00:00
45    Bozo Dog                $5.60          Woof
666   The Devil Incarnate Him…($66,666.00)   0666-666-666   28/10/-4800 00:00:00
427   Jim Bo                  $75.50         0416-763-274   01/05/2023 12:30:00

A bit rudimentary and would be "nicer" if numbers were right or decimal 
point aligned and may need a  bit more error control.

Amazing what a good sleep and two days free of malformed XML ahead can do.

regards

bruce

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20221119/cea22a01/attachment.htm>


More information about the User mailing list