Page 1 of 2

Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 3:18 pm
by max
I Always use "append from" for import and "copy to" for export files from/to disk, but this commands doesn't have syntax for work with files CSV easily and natively (only pipe | separator is expected, but not ; ).
Surely there is a function/command that handles this type of very common files more efficiently. Which?

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 3:28 pm
by Massimo Linossi
APPEND FROM <sourceFile> ;
[FIELDS <fieldNames,...> ;]
[<Scope> ; ]
[WHILE <lWhileCondition> ;]
[FOR <lForCondition> ;]
[VIA <rddName> ;]
[SDF | DELIMITED [WITH BLANK | TAB | PIPE | <xDelimiter> ;]
[CODEPAGE <cCodePage> ;]
[CONNECTION <nConnection>] ]

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 3:37 pm
by nageswaragunupudi
COPY TO "target.csv" DELIMITED WITH ( { '"', ";" } )
APPEND FROM "source.csv" DELIMITED WITH ( { '"', ";" } )

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 3:43 pm
by max
Massimo,
APPEND FROM …. DELIMITED WITH ";" is exactly the command that i try each time, but it doesn't work fine with files without spaces.
It works fine only if the file is with field fixed ascii (lenght declared for each field), but if the file is without space and doesn't have fixed lenght (standard format CSV), it is not ok.

I'll try this syntax Nages, thank you.

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 4:05 pm
by Enrico Maria Giordano
Can I see a reduced and self-contained sample showing the problem, please? If those commands are not working maybe they can be fixed.

EMG

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 6:20 pm
by nageswaragunupudi
Enrico Maria Giordano wrote:Can I see a reduced and self-contained sample showing the problem, please? If those commands are not working maybe they can be fixed.

EMG
The solution I posted works.

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 09, 2018 7:34 pm
by Enrico Maria Giordano
Great!

EMG

Re: Import/Export from/to CSV files (; separator)

Posted: Thu Oct 11, 2018 8:10 pm
by Silvio.Falconi
My test

Conversion DBF to cvs

comand : DoTXT(ndelimiter)

ndelimiter can be {";",",","|"}

default 1

Code: Select all

#include "FiveWin.ch"
#include "FileIo.ch"

FUNCTION GenTxt(ndelimiter)
  
   MsgRun('Sto generando file in  csv. Aspetta un momento...', oApp():cAppName, ;
         { || DoTXT() } )
   MsgInfo("Processo terminato."+CRLF+CRLF+"I file  CSV generati sono stati salvati"+CRLF+CRLF+"nella cartella : "+oApp():cDocPath)
RETU NIL

FUNCTION DoTXT(ndelimiter)
   LOCAL aFields
   LOCAL cBuffer
   LOCAL cDbfFile
   LOCAL cTxtFile
   LOCAL cValue
   LOCAL cTable
   LOCAL nHandle
   LOCAL nFields
   LOCAL nField
   LOCAL nPos
   local aCTipo := {"C","N","L","M","D"}
   local aDTipo := {"Character","Numeric","Logical","Memo","Date"}
   local aFiles := {}
   local aDir   := {}
   local i

   DEFAULT ndelimiter := 1    // ,   ;  |      //  aDelimiters  := {";",",","|"}


   IF ! Empty(oApp():cDbfPath)
      cDir     := oApp():cDbfPath
      aDir  := Directory( cDir+"*.dbf")

      else
        MsgStop( i18n( "Esercizio non attivato correttamente." ) + CRLF + ;
                 i18N( "Per favore eseguire l'attivazione di un esercizio."))
         DbCloseAll()
        return nil
     Endif




   FOR i := 1 TO LEN( aDir )
      aadd(aFiles, aDir[i,1])
   NEXT

  FOR i := 1 TO Len(aFiles)
      cDbfFile := lower(aFiles[i])
      cTxtFile := oApp():cDocPath +StrTran( cDbfFile, ".dbf", ".csv" )
      IF FILE( cTxtFile  )
         DELETE FILE ( cTxtFile  )
      ENDIF


      USE (oApp():cDbfPath+cDbfFile)

      nHandle := fCreate( cTxtFile , FC_NORMAL )

      nFields := fCount()
      aFields := dbStruct()
      cBuffer :=""

      DO WHILE .NOT. Eof()


         FOR nField := 1 TO nFields

           //-------------------
            // Beginning Record
            //-------------------


            DO CASE
               CASE aFields[nField, 2] == "D"
                  cValue := Dtos( FieldGet( nField ))

               CASE aFields[nField, 2] == "N"
                  cValue := Str( FieldGet( nField ))

               CASE aFields[nField, 2] == "L"
                  cValue := If( FieldGet( nField ), "True", "False" )

               OTHERWISE
                  cValue := '"'+Alltrim(FieldGet( nField )) +'"'
               ENDCASE

         //------------------
         // Ending Record
         //------------------

            IF nField=nFields
               cBuffer := Alltrim( cValue )+ CRLF
            else

               If ndelimiter=1
                  cBuffer := Alltrim( cValue )+","
                 elseif  ndelimiter=2
                  cBuffer := Alltrim( cValue )+";"
                 elseif  ndelimiter=3
                  cBuffer := Alltrim( cValue )+"|"
               Endif
              Endif
            fWrite( nHandle, cBuffer )

         NEXT nField


        SKIP
     ENDDO
   *   quit
      dbCloseAll()

      fClose( nHandle )
   NEXT
RETURN NIL
 
if you have suggestion you are welcome

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 15, 2019 1:08 pm
by postinelli
i have the same problem
import to dbf from csv

this example export to csv

you know the way to import csv to dbf ??

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 15, 2019 1:46 pm
by max
As Nages wrote (read above), to import CSV use this:

APPEND FROM "source.csv" DELIMITED WITH ( { '"', ";" } )

Re: Import/Export from/to CSV files (; separator)

Posted: Tue Oct 15, 2019 4:06 pm
by postinelli
dont work for me

Re: Import/Export from/to CSV files (; separator)

Posted: Wed Oct 16, 2019 10:32 am
by Marc Venken
I use this : (found from the forum)

Maybe this be be updated of made better.

Code: Select all

function csvtransform()
LOCAL hCsv, cLine, aLine, nI := 0,aFiles[ADIR("*.csv")]

ADIR("*.csv", aFiles)

nFile = msglist(aFiles )
cFile = aFiles[nFile]
cDbf = STRTRAN(lower(cFile), ".csv", ".dbf")



//  Calculate the max field lengt
//  Caution : If there are CDX-files, dbf ceation will faile !!  erase them first of code it...

IF ( hCsv := fOpen( cFile , 16 ) ) > 0
    HB_FReadLine( hCsv, @cLine, chr( 10 ) )
    aHeader = strtoarr(cLine)
    nlenarray = len(aHeader)
    aFieldcount = array(nLenarray)
    afill(aFieldcount,1)
    nTester = 1
    nTeller = 1
    cdeli = MsgSelect( { ";",","} )

    WHILE HB_FReadLine( hCsv, @cLine, chr( 10 ) ) == 0
      oWnd:SetMsg( "Process data "+str(nTeller++))  // Show progress, but slows down on large files
      if cDeli = ","
         FOR I := 1 TO nLenarray

         if I < nLenarray
           cStr = subStr( cLine, 1, at( [,], cLine ) - 1 )
           cStr = STRTRAN(cStr, '"', '')
         else
           cStr = STRTRAN(cLine, '"', '')
         endif

         nlengte = len(alltrim(cStr))

         if aFieldcount[ I ] < nLengte
            afieldcount[i] = nLengte
         endif

         cLine := subStr( cLine, at( [,], cLine ) + 1 )

         //cLine := subStr( cLine, at( ["], cLine ) + 1 )

         NEXT
      else

         FOR I := 1 TO nLenarray

         if I < nLenarray
           cStr = subStr( cLine, 1, at( [;], cLine ) - 1 )
           cStr = STRTRAN(cStr, '"', '')
         else
           cStr = STRTRAN(cLine, '"', '')
         endif

         nlengte = len(cStr)

         if aFieldcount[ I ] < nLengte
            afieldcount[i] = nLengte
         endif

         cLine := subStr( cLine, at( [;], cLine ) + 1 )

         //cLine := subStr( cLine, at( ["], cLine ) + 1 )

         NEXT

      endif

    ENDDO
    builddbf(aHeader,aFieldcount,cDbf)

    fClose( hCsv )
ELSE
    alert( "BAD LUCK" )
    return
ENDIF
fClose( hCsv )
close all

 

Re: Import/Export from/to CSV files (; separator)

Posted: Fri Nov 20, 2020 3:52 pm
by Silvio.Falconi
Marc Venken wrote:I use this : (found from the forum)

Maybe this be be updated of made better.

Code: Select all

function csvtransform()
LOCAL hCsv, cLine, aLine, nI := 0,aFiles[ADIR("*.csv")]

ADIR("*.csv", aFiles)

nFile = msglist(aFiles )
cFile = aFiles[nFile]
cDbf = STRTRAN(lower(cFile), ".csv", ".dbf")



//  Calculate the max field lengt
//  Caution : If there are CDX-files, dbf ceation will faile !!  erase them first of code it...

IF ( hCsv := fOpen( cFile , 16 ) ) > 0
    HB_FReadLine( hCsv, @cLine, chr( 10 ) )
    aHeader = strtoarr(cLine)
    nlenarray = len(aHeader)
    aFieldcount = array(nLenarray)
    afill(aFieldcount,1)
    nTester = 1
    nTeller = 1
    cdeli = MsgSelect( { ";",","} )

    WHILE HB_FReadLine( hCsv, @cLine, chr( 10 ) ) == 0
      oWnd:SetMsg( "Process data "+str(nTeller++))  // Show progress, but slows down on large files
      if cDeli = ","
         FOR I := 1 TO nLenarray

         if I < nLenarray
           cStr = subStr( cLine, 1, at( [,], cLine ) - 1 )
           cStr = STRTRAN(cStr, '"', '')
         else
           cStr = STRTRAN(cLine, '"', '')
         endif

         nlengte = len(alltrim(cStr))

         if aFieldcount[ I ] < nLengte
            afieldcount[i] = nLengte
         endif

         cLine := subStr( cLine, at( [,], cLine ) + 1 )

         //cLine := subStr( cLine, at( ["], cLine ) + 1 )

         NEXT
      else

         FOR I := 1 TO nLenarray

         if I < nLenarray
           cStr = subStr( cLine, 1, at( [;], cLine ) - 1 )
           cStr = STRTRAN(cStr, '"', '')
         else
           cStr = STRTRAN(cLine, '"', '')
         endif

         nlengte = len(cStr)

         if aFieldcount[ I ] < nLengte
            afieldcount[i] = nLengte
         endif

         cLine := subStr( cLine, at( [;], cLine ) + 1 )

         //cLine := subStr( cLine, at( ["], cLine ) + 1 )

         NEXT

      endif

    ENDDO
    builddbf(aHeader,aFieldcount,cDbf)

    fClose( hCsv )
ELSE
    alert( "BAD LUCK" )
    return
ENDIF
fClose( hCsv )
close all

 
where is the source code complete ?

Re: Import/Export from/to CSV files (; separator)

Posted: Fri Nov 20, 2020 4:17 pm
by Marc Venken
Silvio.Falconi wrote:
Marc Venken wrote:I use this : (found from the forum)

Maybe this be be updated of made better.

Silvio :
where is the source code complete ?
This function i have found on the forum. What would you like more ?

Re: Import/Export from/to CSV files (; separator)

Posted: Fri Nov 20, 2020 6:11 pm
by ukoenig
some infos about converting data DBF - CSV and CSV - DBF

Image

http://forums.fivetechsupport.com/viewt ... sv#p155953

regards
Uwe :D