Search code examples
openedgeprogress-4gl4gl

Add leading zeros to a character variable in progress 4gl


I am trying to import a .csv file to match the records in the database. However, the database records has leading zeros. This is a character field The amount of data is a bit higher side. Here the length of the field in database is x(15).

The problem I am facing is that the .csv file contains data like example AB123456789 wherein the database field has "00000AB123456789" .

I am importing the .csv to a character variable.

Could someone please let me know what should I do to get the prefix zeros using progress query?

Thank you.


Solution

  • You need to FILL() the input string with "0" in order to pad it to a specific length. You can do that with code similar to this:

    define variable inputText as character no-undo format "x(15)".
    
    define variable n as integer no-undo.
    
    input from "input.csv".
    
    repeat:
    
      import inputText.
    
      n = 15 - length( inputText ).
    
      if n > 0 then
        inputText = fill( "0", n ) + inputText.
    
    
      display inputText.
    
    end.
    
    input close.
    

    Substitute your actual field name for inputText and use whatever mechanism you are actually using for importing the CSV data.

    FYI - the "length of the field in the database" is NOT "x(15)". That is a display formatting string. The data dictionary has a default format string that was created when the schema was defined but it has absolutely no impact on what is actually stored in the database. ALL Progress data is stored as variable length length. It is not padded to fit the display format and, in fact, it can be "overstuffed" and it is very, very common for applications to do so. This is a source of great frustration to SQL reporting tools that think the display format is some sort of length limit. It is not.