Exporting Repetitive Column to a .CSV file

sanchit

New Member
Exporting Repetitive Column Header to a .CSV file

Hi Forum,
My current task needs to export a temp-table to a .csv file. My problem begins with the headers that I'm exporting with it. Currently whatever vaules that I need are stored in a temp table(ttUser). After that this is what i do.
Code:
OUTPUT TO user1.csv.
  DEFINE FRAME f1 HEADER
    "Product Line,"
    "Discrete Qty" WITH PAGE-TOP WIDTH 162.
  VIEW FRAME f1.
  FOR EACH ttUser:
    EXPORT DELIMITER ","
    pt_line
    demqty.
  END.
OUTPUT CLOSE.

The field "demqty" in temp-table is an EXTENT of size 54. And the way I am defining header prints header (Discrete Qty) only for the first column. I need it to be displayed for all the 54 columns that are being created.

Hope I have explained my problem precisely enough.
Thanks and Regrads,
San
 
Re: Exporting Repetitive Column Header to a .CSV file

You can have this code for free... save it as a .p in your propath and call it using the method in the comments at the top. It'll export the whole temp-table with column headers and handles extents.

Code:
/* RUN w:\ttexport.p                             */
/*   (INPUT TEMP-TABLE tt-User:HANDLE,  */
/*    INPUT "c:\temp\fwdcovtt.csv").             */

&SCOPED-DEFINE IO_DELIMITER ","

DEFINE INPUT  PARAMETER ipHandle AS HANDLE      NO-UNDO.
DEFINE INPUT  PARAMETER ipFile   AS CHARACTER   NO-UNDO.

RUN ExportTempTableToCrystalTextFile 
  (INPUT TABLE-HANDLE ipHandle,
   INPUT ipFile,
   INPUT "blah",
   INPUT "FOR EACH " + ipHandle:NAME,
   INPUT TRUE,
   INPUT "").

PROCEDURE ExportTempTableToCrystalTextFile :
/*------------------------------------------------------------------------------
  Purpose:     Dump Content of TT to a specified txt file...
  Parameters:  iphTempTableHandle - Temp Table Handle
               iplvReportFile  - Txt file
               iplvReportTitle - Report Header for use in text files. 
               iplvCustomQueryString - Custom query string if you dont want 
               a standard FOR EACH...
  Notes:       
------------------------------------------------------------------------------*/

  DEFINE INPUT  PARAMETER TABLE-HANDLE iphTempTableHandle.
  DEFINE INPUT  PARAMETER iplvReportFile        AS CHARACTER  NO-UNDO.
  DEFINE INPUT  PARAMETER iplvReportTitle       AS CHARACTER  NO-UNDO.
  DEFINE INPUT  PARAMETER iplvCustomQueryString AS CHARACTER  NO-UNDO.
  DEFINE INPUT  PARAMETER iplvSuppressNameTitle AS LOGICAL    NO-UNDO.
  DEFINE INPUT  PARAMETER ipFiltersSelected     AS CHARACTER  NO-UNDO.

  DEFINE VARIABLE lhQuery                       AS HANDLE     NO-UNDO.
  DEFINE VARIABLE lhBuffer                      AS HANDLE     NO-UNDO.
  DEFINE VARIABLE lhField                       AS HANDLE     NO-UNDO.
  DEFINE VARIABLE lvReportFile                  AS CHARACTER  NO-UNDO.
  DEFINE VARIABLE lvNoOfFieldsToPrint           AS INT        NO-UNDO.
  DEFINE VARIABLE lvCounter                     AS INT        NO-UNDO.
  DEFINE VARIABLE lvReportHeader                AS CHARACTER  NO-UNDO.
  DEFINE VARIABLE lvQueryString                 AS CHARACTER  NO-UNDO.
  DEFINE VARIABLE lvCastDataType                AS CHARACTER   NO-UNDO.
  DEFINE VARIABLE lvi                           AS INTEGER     NO-UNDO.
             
  IF NOT iphTempTableHandle:HAS-RECORDS THEN
  DO:
    IF VALID-HANDLE(iphTempTableHandle) THEN
      DELETE OBJECT iphTempTableHandle NO-ERROR.
    RETURN.
  END.

  DO ON ERROR UNDO, RETURN
    ON STOP UNDO, RETURN:
    
    CREATE BUFFER lhBuffer FOR TABLE iphTempTableHandle:DEFAULT-BUFFER-HANDLE.

    CREATE QUERY lhQuery.
    IF NOT lhQuery:SET-BUFFERS(lhBuffer) THEN
      RETURN.
    
    IF iplvCustomQueryString NE "" THEN
      lvQueryString = iplvCustomQueryString.
    ELSE
      lvQueryString = "FOR EACH " + iphTempTableHandle:NAME.

    IF NOT lhQuery:QUERY-PREPARE(lvQueryString) THEN
      RETURN.
    
    IF NOT lhQuery:QUERY-OPEN THEN
      RETURN.
        
    OUTPUT TO VALUE(iplvReportFile).
    
    IF NOT iplvSuppressNameTitle THEN
      PUT UNFORMATTED 
          QUOTER("GV_NAME_FOR_REPORTS")   {&IO_DELIMITER}
          QUOTER("GV_CURRENT_USER_NAME")  {&IO_DELIMITER}
          QUOTER("REPORT_TITLE")          {&IO_DELIMITER}
          QUOTER("Filter Selection")      {&IO_DELIMITER}.

    lhQuery:GET-FIRST().
    
    /* Once We have a record ... outoput HEADER ROW... */
    IF lhBuffer:AVAILABLE THEN
    DO:
      ASSIGN lvNoOfFieldsToPrint = lhBuffer:NUM-FIELDS.
      
      DO lvCounter = 1 TO lvNoOfFieldsToPrint :
        
        lhField = lhBuffer:BUFFER-FIELD(lvCounter) NO-ERROR.
        
        IF ERROR-STATUS:ERROR THEN
          RETURN.

        IF lhField:EXTENT GT 0 THEN
        DO lvi = 1 TO lhField:EXTENT:
          ASSIGN lvReportHeader = lhField:NAME      
                 lvReportHeader = lvReportHeader + "_" + STRING(lvi).
  
          PUT UNFORMATTED QUOTER(lvReportHeader).
          IF lvi < lhField:EXTENT THEN
            PUT UNFORMATTED {&IO_DELIMITER}.
        END.
        ELSE
        DO:
          ASSIGN lvReportHeader = lhField:NAME.      
  
          PUT UNFORMATTED QUOTER(lvReportHeader).
        END.
    
        IF lvCounter < lvNoOfFieldsToPrint THEN
          PUT UNFORMATTED {&IO_DELIMITER}.

      END. /* lvCounter = 1 TO lvNoOfFieldsToPrint */

      PUT SKIP.

    END. /* IF lhBuffer:AVAILABLE THEN */

    DO WHILE NOT lhQuery:QUERY-OFF-END:
      
      
      lvCounter = 0.
      DO lvCounter = 1 TO lvNoOfFieldsToPrint :
        
        lhField = lhBuffer:BUFFER-FIELD(lvCounter) NO-ERROR.
        
          

        IF VALID-HANDLE(lhField) THEN
        DO:
          IF lhField:HELP NE "" THEN 
            ASSIGN lvCastDataType = lhField:HELP. 
          ELSE 
            ASSIGN lvCastDataType = "STRING".

          IF lhField:EXTENT GT 0 THEN
          DO lvi = 1 TO lhField:EXTENT:
            CASE lvCastDataType :
              WHEN "CHARACTER" OR
              WHEN "STRING" THEN
                PUT UNFORMATTED QUOTER(lhField:BUFFER-VALUE(lvi)).
              WHEN "FORCECHAR" THEN
                PUT UNFORMATTED "=" QUOTER(lhField:BUFFER-VALUE(lvi)).
              /* To be completed as / if required */
              OTHERWISE
                PUT UNFORMATTED lhField:BUFFER-VALUE(lvi).
            END CASE.
            IF lvi < lhField:EXTENT THEN
              PUT UNFORMATTED {&IO_DELIMITER}.
          END.

          ELSE 
          DO:
            CASE lvCastDataType :
              
              WHEN "CHARACTER" OR
              WHEN "STRING" THEN
                PUT UNFORMATTED QUOTER(lhField:BUFFER-VALUE).
              WHEN "FORCECHAR" THEN
                PUT UNFORMATTED "=" QUOTER(lhField:BUFFER-VALUE).
              /* To be completed as / if required */
              OTHERWISE
                PUT UNFORMATTED lhField:BUFFER-VALUE .
  
            END CASE.
          END.

        END.
        
        IF lvCounter < lvNoOfFieldsToPrint THEN
            PUT UNFORMATTED {&IO_DELIMITER}.

      END.

      PUT SKIP.
  
      lhQuery:GET-NEXT().
    END.

    OUTPUT CLOSE.
  
    IF VALID-HANDLE(lhQuery) THEN
      DELETE OBJECT lhQuery NO-ERROR.
    IF VALID-HANDLE(lhBuffer) THEN
      DELETE OBJECT lhBuffer NO-ERROR.
    IF VALID-HANDLE(lhField) THEN
      DELETE OBJECT lhField NO-ERROR.
    IF VALID-HANDLE(iphTempTableHandle) THEN
      DELETE OBJECT iphTempTableHandle NO-ERROR.
    {&ResetError}

  END.
END PROCEDURE.
 
Re: Exporting Repetitive Column Header to a .CSV file

Thank you cringer for you reply. But is there anyway I could get what I want from the piece of code I have written?
 
Re: Exporting Repetitive Column Header to a .CSV file

Does this do what you want?:
Code:
DEFINE VARIABLE i AS INT NO-UNDO.

OUTPUT TO user1.csv.

PUT "Product Line".
DO i = 1 TO 54:
   PUT ",Discrete Qty".
END.
PUT SKIP.

FOR EACH ttUser:
   EXPORT DELIMITER "," pt_line     demqty.
END.

OUTPUT CLOSE.
 
Back
Top