DEFINE VARIABLE lv-Detail-Line AS CHARACTER NO-UNDO EXTENT 40. /*The file has a max width of 40 columns*/
DEFINE VARIABLE lv-CurrentRow AS INTEGER NO-UNDO.
DEFINE VARIABLE lv-i AS INTEGER NO-UNDO.
DEFINE VARIABLE lv-Label AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-Format AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-DataType AS CHARACTER NO-UNDO.
DEFINE VARIABLE lv-Errors AS CHARACTER NO-UNDO.
INPUT STREAM s-import FROM VALUE(lv-ImportFileName).
ImportLoop:
REPEAT:
lv-Detail-Line = "".
IMPORT STREAM s-import DELIMITER "," lv-Detail-Line.
lv-CurrentRow = lv-CurrentRow + 1.
IF lv-CurrentRow EQ 1 AND NOT VALID-HANDLE(lv-TTHandle) THEN /*This is the top column so read the labels*/
DO:
CREATE TEMP-TABLE lv-TTHandle.
ColLoop:
DO lv-i = 1 TO 40:
IF lv-Detail-Line[lv-i] EQ "" THEN
NEXT ColLoop.
lv-Label = REPLACE(lv-Detail-Line[lv-i]," ","").
lv-Label = REPLACE(lv-Label,",","").
ASSIGN
lv-Format = "X(20)"
lv-DataType = "CHARACTER". /*You can set your format conditionally based on the label here*/
lv-TTHandle:ADD-NEW-FIELD(lv-Label,lv-DataType,0,lv-Format,?,?,lv-Detail-Line[lv-i]).
CREATE tt-Columns. /*Keep track of the columns we have in the file*/
ASSIGN
tt-Columns.ColumnName = lv-Label
tt-Columns.ColumnNumber = lv-i
tt-Columns.DataType = lv-DataType.
END.
lv-TTHandle:TEMP-TABLE-PREPARE("tt-Import").
lv-DefaultBufferHandle = lv-TTHandle:DEFAULT-BUFFER-HANDLE.
NEXT ImportLoop.
END.
DataLoop:
DO lv-i = 1 TO 40:
FIND FIRST tt-Columns
WHERE tt-Columns.ColumnNumber EQ lv-i NO-ERROR. /*Just check we've got one!*/
IF NOT AVAILABLE tt-Columns THEN
NEXT DataLoop.
CASE tt-Columns.DataType:
WHEN "INTEGER" OR WHEN "DECIMAL" THEN
lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = fn-EDI-Trim-Format(lv-Detail-Line[lv-i]).
WHEN "DATE" THEN
lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = fn-EDI-DateConv(lv-Detail-Line[lv-i]).
OTHERWISE
lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = TRIM(lv-Detail-Line[lv-i],CHR(160)).
END CASE.
END.
END.
INPUT STREAM s-import CLOSE.