Udostępnij za pośrednictwem


Eksportowanie pól memo z innymi typami pól do pliku tekstowego za pomocą programu Visual FoxPro

W tym artykule opisano sposób dynamicznego eksportowania rekordów zawierających pola Nota w tabeli wraz z innymi typami pól do pliku tekstowego rozdzielanego przecinkami.

Oryginalna wersja produktu: Visual FoxPro
Oryginalny numer KB: 241424

Podsumowanie

W tym artykule pokazano, jak dynamicznie eksportować rekordy zawierające pola Nota w tabeli wraz z innymi typami pól do pliku tekstowego rozdzielanego przecinkami.

Więcej informacji

Przykładowy kod w tym artykule jest zgodny z następującą kolejnością:

  1. Prosi o tabelę źródłową (plik .dbf).
  2. Prosi o podanie docelowego pliku tekstowego (.txt).
  3. Wyeksportuj zawartość tabeli do pliku tekstowego.

Kod skanuje i określa każdy typ pola oraz każdy rekord w tabeli, a następnie przetwarza je odpowiednio do typu danych:

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