Add a extra option to the method ToCSV

Post Reply
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Add a extra option to the method ToCSV

Post by Marc Venken »

METHOD ToCSV( cFile, aCols, lHeaders, cTrue, cFalse ) CLASS TXBrowse

I looked into the code of Xbrowse to find out how ToCsv is working. I see that the delimeter is hard code as a comma ( , )
I need i to be ( ; )

Is it a idea to add this option into Xbrowse source ? (extra : cDelimiter)

Or is there a other way ?
I prefer NOT to change source of FWH in order to keep the updates.

I do have read that it is possible to subclass from a source of FWH.
Just out of interest how this could work for my learning curve, maybe someone can use this code from source (Xbrowse) and make this work

I just named it MY_ToCSV (reference that it is My version) Then I can change the "," into ";" without Mr. Rao to change the sources of FWH

Code: Select all

METHOD MY_ToCSV( cFile, aCols, lHeaders, cTrue, cFalse ) CLASS TXBrowse

   local cCsv    := ""
   local n, cLine, uVal, c, uBm, hFile
   local oExcel, oBook

   if aCols == nil
      aCols  := ::GetVisibleCols()
   else
      AEval( aCols, { |o,i| aCols[ i ] := ::oCol( o ) } )
   endif

   DEFAULT lHeaders := .t., cTrue := cXlTrue, cFalse := cXlFalse

   if lHeaders
      for n := 1 to Len( aCols )
         if n > 1
            cCsv  += ","
         endif
         cCsv  += '"' + StrTran( aCols[ n ]:cHeader, CRLF, " " ) + '"'
      next
   endif

   uBm      := ::BookMark
   Eval( ::bGoTop )

   REPEAT
      cLine    := ""

      for n := 1 to Len( aCols )

         c     := ""

         uVal  := aCols[ n ]:Value
         c := FW_ValToCSV( uVal, cTrue, cFalse )

         if n > 1
            cLine    += ","
         endif
         cLine    += c

      next

      if !Empty( cCsv )
         cCsv += CRLF
      endif

      cCsv    += cLine

   UNTIL Eval( ::bSkip, 1 ) == 0
   ::BookMark  := uBm

   if !Empty( cFile )
      cFile    := TrueName( cFile )
      if ( hFile := fCreate( cFile, 0 ) ) > 0
         fWrite( hFile, cCsv )
         fClose( hFile )
         cCsv  := nil
      endif
   endif

return IfNil( cFile, cCsv )

 
Marc Venken
Using: FWH 20.08 with Harbour
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Add a extra option to the method ToCSV

Post by nageswaragunupudi »

We will provide a new parameter for the delimiter in our next versions.
We will also publish a patch for you here.

You can use derived classes of xbrowse very easily.
You can use the derived class for the entire application or different derived classes for different browses.
Please see samples xbrchild.prg, xbrcalen.prg and xbrstgrd.prg in the samples folder.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Add a extra option to the method ToCSV

Post by nageswaragunupudi »

Implemented in FWH2009

Code: Select all

METHOD ToCSV( cFile, aCols, lHeaders, cTrue, cFalse, cDelim ) CLASS TXBrowse

   local cCsv    := ""
   local n, cLine, uVal, c, uBm, hFile
   local oExcel, oBook

   if aCols == nil
      aCols  := ::GetVisibleCols()
   else
      AEval( aCols, { |o,i| aCols[ i ] := ::oCol( o ) } )
   endif

   DEFAULT lHeaders := .t., cTrue := cXlTrue, cFalse := cXlFalse, cDelim := ","

   if lHeaders
      for n := 1 to Len( aCols )
         if n > 1
            cCsv  += cDelim
         endif
         cCsv  += '"' + StrTran( aCols[ n ]:cHeader, CRLF, " " ) + '"'
      next
   endif

   uBm      := ::BookMark
   Eval( ::bGoTop, Self )

   REPEAT
      cLine    := ""

      for n := 1 to Len( aCols )

         c     := ""

         uVal  := aCols[ n ]:Value
         c := FW_ValToCSV( uVal, cTrue, cFalse )

         if n > 1
            cLine    += cDelim
         endif
         cLine    += c

      next

      if !Empty( cCsv )
         cCsv += CRLF
      endif

      cCsv    += cLine

   UNTIL Eval( ::bSkip, 1 ) == 0
   ::BookMark  := uBm

   if !Empty( cFile )
      cFile    := TrueName( cFile )
      if ( hFile := fCreate( cFile, 0 ) ) > 0
         fWrite( hFile, cCsv )
         fClose( hFile )
         cCsv  := nil
      endif
   endif

return IfNil( cFile, cCsv )
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Re: Add a extra option to the method ToCSV

Post by Marc Venken »

Thank you !!

I wait till the release
Marc Venken
Using: FWH 20.08 with Harbour
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Add a extra option to the method ToCSV

Post by nageswaragunupudi »

Till then, you can confidently modify your xbrowse.prg like this and keep using it.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Re: Add a extra option to the method ToCSV

Post by Marc Venken »

nageswaragunupudi wrote:Till then, you can confidently modify your xbrowse.prg like this and keep using it.
I've never done that

I have to link en recompile source I believe ?
Marc Venken
Using: FWH 20.08 with Harbour
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Add a extra option to the method ToCSV

Post by Otto »

Marc, You are never too old to learn something new. :D
You can link in a copy of xbrowse to your program and make the changes as Mr. Rao said.

The generosity of our masters to share the knowledge and the source code is the real freedom Fivewin gives us.
Thank you Mr. Rao.
Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Re: Add a extra option to the method ToCSV

Post by Marc Venken »

Otto wrote:Marc, You are never too old to learn something new. :D
You can link in a copy of xbrowse to your program and make the changes as Mr. Rao said.
Out of curiosity :

My files :

Build.bat

Code: Select all

@ECHO ON
IF "%1"=="O" DEL OBJ/Q
IF "%1"=="o" DEL OBJ/Q
DEL OBJ/Q

"C:\Borland\BCC7\Bin\brc32.exe" -r TEST.RC
"C:\Borland\BCC7\Bin\make.exe" -f TEST.MAK

echo ERRORLEVEL
IF ERRORLEVEL 1 GOTO COMPILEERRORS
IF ERRORLEVEL 0 goto DONE
pause
GOTO EXIT

:COMPILEERRORS
pause
GOTO EXIT

:DONE
test.exe

:EXIT
 
test.mak

Code: Select all

#Borland make sample, (c) FiveTech Software 2005-2009

HBDIR=c:\harbour
BCDIR=c:\borland\bcc7
FWDIR=c:\fwharb

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.ch  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.RC  = .\

#important: Use Uppercase for filenames extensions, in the next two rules!

PRG =      \
TEST1.PRG  

C =        \
TEST1.C    

OBJ = $(PRGS:.PRG=.\OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : TEST.EXE

#RES-file wordt door COMPRES.BAT aangemaakt
#TEST.EXE  : $(PRG:.PRG=.OBJ) $(C:.C=.OBJ) TEST.RES
TEST.EXE  : $(PRG:.PRG=.OBJ) $(C:.C=.OBJ)
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
#  echo $(OBJS), + >> b32.bc
   echo OBJ\TEST1.OBJ, + >> b32.bc

   echo TEST.EXE, + >> b32.bc
   echo TEST.MAP, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib $(FWDIR)\lib\libmysql.lib $(FWDIR)\lib\BARLIB32.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\png.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\xhb.lib + >> b32.bc
   echo $(HBDIR)\lib\hbtip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc

   rem Uncomment these two lines to use Advantage RDD
   rem echo $(HBDIR)\lib\rddads.lib + >> b32.bc
   rem echo $(HBDIR)\lib\Ace32.lib + >> b32.bc

   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\uuid.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
   echo $(BCDIR)\lib\wininet.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc

   IF EXIST TEST.RES echo TEST.RES >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /W0 /V /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ -DHB_API_MACROS > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp

#RES-file wordt door COMPRES.BAT aangemaakt
#TEST.RES : ..\RES\TEST.RC
#  $(BCDIR)\bin\brc32.exe -r ..\RES\TEST.RC

 
So,
1. I can take the xbrowse.prg file from source dir, change the code from mr. Rao and save this into the DIR of the application i'm working on.
2. I add in the files above (the prg = and the C = section) below test1.prg the xbrowse.prg, so the 2 prg files are linked

and that's it ? No rebuilding of lib files needed ? it can't be that easy :oops: :oops:
Marc Venken
Using: FWH 20.08 with Harbour
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Re: Add a extra option to the method ToCSV

Post by Otto »

Marc, yes. That is what I do.

I am sure Mr. Rao will explain it here for us.
Best regards,
Otto
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org

********************************************************************
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Add a extra option to the method ToCSV

Post by nageswaragunupudi »

Marc Venken wrote:Thank you !!

I wait till the release
Revised version of FWH2008 is released.
You will find this change also in this version.
Please download.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Marc Venken
Posts: 727
Joined: Tue Jun 14, 2016 7:51 am

Re: Add a extra option to the method ToCSV

Post by Marc Venken »

Great !!! Thanks
Marc Venken
Using: FWH 20.08 with Harbour
Post Reply