Skip to content

Instantly share code, notes, and snippets.

@kaizhu256
Created September 21, 2021 15:33
Show Gist options
  • Select an option

  • Save kaizhu256/5972acb2755baf01dde2c42eda7264b7 to your computer and use it in GitHub Desktop.

Select an option

Save kaizhu256/5972acb2755baf01dde2c42eda7264b7 to your computer and use it in GitHub Desktop.

Revisions

  1. kaizhu256 created this gist Sep 21, 2021.
    81 changes: 81 additions & 0 deletions vfp.memo.to.csv.prg
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,81 @@
    * https://docs.microsoft.com/en-us/previous-versions/troubleshoot/visualstudio/foxpro/export-record-memo-fields

    CLOSE ALL
    CLEAR ALL

    lcFieldString = ''
    lcMemo = ''

    USE GETFILE('dbf', 'Select DBF') && Prompts for table to be used.

    lnFieldCount = AFIELDS(laGetFields) && Builds array of fields from the
    && selected table.

    *!* Prompt for Output file and use Low-Level functions
    *!* to create it.
    lcTextFile = FCREATE(GETFILE('txt', 'Select Text'))

    *!* Starts scanning the table and converts the fields
    *!* values according to their types **
    SCAN
    WAIT WINDOW STR(RECNO()) + ' Of ' + STR(RECCOUNT()) NOWAIT

    FOR lnCount = 1 TO lnFieldCount
    lcType = laGetFields(lnCount, 2)

    IF lcType # 'G' && Don't try to turn a general field into a string
    lcString = EVALUATE(laGetFields(lnCount, 1))
    EndIf

    DO CASE
    CASE lcType = 'M' && Process the Memo Fields
    lnMemoLines = MEMLINES(EVALUATE(laGetFields(lnCount,1)))
    FOR lnLoop = 1 TO lnMemoLines
    IF lnLoop < lnMemoLines
    lcMemo = lcMemo + ;
    ALLTRIM(MLINE(EVALUATE(laGetFields(lnCount, 1)), ;
    lnLoop)) + ' '
    ELSE
    lcMemo = lcMemo + ;
    ALLTRIM(MLINE(EVALUATE(laGetFields(lnCount, 1)), ;
    lnLoop))
    ENDif
    ENDfor

    lcString = lcMemo
    lcMemo = ''
    CASE lcType = 'G' && Process the General Fields
    lcString = 'Gen'
    CASE lcType = 'D' && Process the Date Fields
    lcString = DTOC(lcString)
    CASE lcType = 'T' && Process the DateTime Fields
    lcString = TTOC(lcString)
    CASE lcType = 'N' && Process the Numeric Fields
    lcString = STR(lcString, LEN(STR(lcString)), 2)
    CASE lcType = 'I' && Process the Integer Fields
    lcString = STR(lcString)
    CASE lcType = 'L' && Process the Logical Fields
    IF lcString = .T.
    lcString = 'T'
    ELSE
    lcString = 'F'
    ENDif
    ENDcase

    IF lnCount < lnFieldCount && Determines if the last field was
    && processed and sets the closing quote.
    lcFieldString = lcFieldString + '"' + lcString + '"' + ','
    ELSE
    lcFieldString = lcFieldString + '"' + lcString + '"'
    ENDif
    ENDfor

    FPUTS(lcTextFile, lcFieldString) && Writes string to the text file.
    lcFieldString = ''
    ENDscan

    FCLOSE(lcTextFile)

    CLOSE All
    CLEAR All
    WAIT WINDOW 'Text File Creation Completed' NOWAIT