Compartir a través de


Exportación de campos memo con otros tipos de campo a un archivo de texto con Visual FoxPro

En este artículo se describe cómo exportar dinámicamente registros que contienen campos Memo en una tabla, junto con los otros tipos de campo, en un archivo de texto delimitado por comas.

Versión original del producto: Visual FoxPro
Número de KB original: 241424

Resumen

En este artículo se muestra cómo exportar registros dinámicamente que contienen campos Memo en una tabla, junto con los otros tipos de campo, en un archivo de texto delimitado por comas.

Más información

El código de ejemplo de este artículo sigue este orden:

  1. Solicita una tabla de origen (archivo .dbf).
  2. Solicita un archivo de texto objetivo (.txt).
  3. Exporte el contenido de la tabla al archivo de texto.

El código examina y determina cada tipo de campo y cada registro de la tabla y, a continuación, los procesa según corresponda al tipo de datos:

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