/* Progress routine to show use of libprsimport.so.1 */ /* These routines allows one to parse VERY LARGE csv files */ PROCEDURE NumColumns EXTERNAL "/home/sauge/code/C/importer/libprsimport.so.1" CDECL: DEFINE INPUT-OUTPUT PARAMETER cLine AS MEMPTR NO-UNDO. DEFINE INPUT-OUTPUT PARAMETER cJunk AS MEMPTR NO-UNDO. DEFINE RETURN PARAMETER iNumColumns AS SHORT NO-UNDO. END. PROCEDURE GetColumn EXTERNAL "/home/sauge/code/C/importer/libprsimport.so.1" CDECL: DEFINE INPUT-OUTPUT PARAMETER cLine AS MEMPTR NO-UNDO. DEFINE INPUT PARAMETER iColumnNum AS SHORT NO-UNDO. DEFINE INPUT-OUTPUT PARAMETER cColData AS MEMPTR NO-UNDO. DEFINE RETURN PARAMETER i AS SHORT NO-UNDO. END. PROCEDURE ClearMem EXTERNAL "/home/sauge/code/C/importer/libprsimport.so.1" CDECL: DEFINE INPUT-OUTPUT PARAMETER cLine AS MEMPTR NO-UNDO. DEFINE INPUT PARAMETER iLineSize AS SHORT NO-UNDO. DEFINE RETURN PARAMETER i AS SHORT NO-UNDO. END. DEFINE VARIABLE cLine AS CHARACTER NO-UNDO. DEFINE VARIABLE cColData AS CHARACTER NO-UNDO. DEFINE VARIABLE mLine AS MEMPTR NO-UNDO. DEFINE VARIABLE mColData AS MEMPTR NO-UNDO. DEFINE VARIABLE iNumCol AS INTEGER NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE j AS INTEGER NO-UNDO. /* Pull in a line of CSV file we want to parse */ INPUT FROM 7.csv. IMPORT UNFORMATTED cLine. INPUT CLOSE. /* Allocate space for our C routine hits */ SET-SIZE(mLine) = 1024. SET-SIZE(mColData) = 1024. /* Move data into space for C routines to work on */ PUT-STRING(mLine, 1) = cLine. RUN NumColumns (INPUT-OUTPUT mLine, INPUT-OUTPUT mColData, OUTPUT iNumCol). DISPLAY iNumCol. /* IMPORTANT: Note how we use 0 as the starting column! */ DO i = 0 TO iNumCol - 1: RUN ClearMem (INPUT-OUTPUT mColData, INPUT 1024, OUTPUT j). RUN GetColumn (INPUT-OUTPUT mLine, INPUT i, INPUT-OUTPUT mColData, OUTPUT j). DISPLAY i GET-STRING(mColData,1) FORMAT "x(40)" WITH FRAME a DOWN. DOWN WITH FRAME a. END.