Changeset: 379 fdbozzo - 26/07/2014 17:49:05:

v1.19.28
- Nuevas opciones en foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) y en archivo.dbf.cfg (DBF_Conversion_Order, DBF_Conversion_Condition) para la conversión de DBFs a texto cuando DBF_Conversion_Support es 4 (Edyshor)
This commit is contained in:
fdbozzo
2014-07-26 17:49:16 +02:00
8 changed files with 391 additions and 63 deletions

View File

@@ -2,8 +2,8 @@ Lparameters toUpdateInfo
Local lcNote
With toUpdateInfo
.VersionNumber = 'v1.19.27'
.VersionDate = Date(2014,07,18)
.VersionNumber = 'v1.19.28'
.VersionDate = Date(2014,07,26)
.SourceFileUrl = 'http://vfpxrepository.com/dl/thorupdate/Projects/FoxBin2Prg/FoxBin2Prg.Zip'
.Link = 'http://vfpx.codeplex.com/wikipage?title=FoxBin2PRG'
@@ -17,6 +17,8 @@ Demo video using FoxBin2Prg with PlasticSCM: http://youtu.be/sE4wQ50Itqg
Change History -------------------------------------------------------------
2014/07/26 v1.19.28
- Feature: Added new options in foxbin2prg.cfg (DBF_Conversion_Included, DBF_Conversion_Excluded) and in filename.dbf.cfg (DBF_Conversion_Order, DBF_Conversion_Condition) for exporting DBFs data to text when DBF_Conversion_Support is 4 (Edyshor)
2014/07/18 v1.19.27
- Feature: Added support for exporting DBF data for DIFF (It's intended just for DIFF small DBFs, as config ones, not for true Data export. Binary fields are not exported and there is not an Import Data feature) (Doug Hennig)

View File

@@ -0,0 +1,239 @@
DEFINE CLASS ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter AS FxuTestCase OF FxuTestCase.prg
#IF .F.
LOCAL THIS AS ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter OF ut__foxbin2prg__c_foxbin2prg__FilenameFoundInFilter.PRG
#ENDIF
icObj = NULL
*******************************************************************************************************************************************
FUNCTION SETUP
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
*LOCAL loObj AS c_conversor_base OF "FOXBIN2PRG.PRG"
SET PROCEDURE TO 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
oFXU_LIB = CREATEOBJECT('CL_FXU_CONFIG')
*oFXU_LIB.setup_comun()
THIS.icObj = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loObj = THIS.icObj
*loObj.l_Test = .F.
ENDFUNC
*******************************************************************************************************************************************
FUNCTION TearDown
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
THIS.icObj = NULL
IF VARTYPE(oFXU_LIB) = "O"
*oFXU_LIB.teardown_comun()
oFXU_LIB = NULL
ENDIF
RELEASE PROCEDURE 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
RELEASE oFXU_LIB
CLOSE PROCEDURES
CLEAR RESOURCES
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Evaluate_results
LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tl_Valor, tl_ValorEsperado
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
IF PCOUNT() = 0
THIS.messageout( "* Support method, not a valid test." )
RETURN .T.
ENDIF
LOCAL loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG"
IF ISNULL(toEx)
loFoxBin2Prg = THIS.icObj
*-- MESSAGES
THIS.messageout( 'Filename found in filter >> Esperado: ' + TRANSFORM(tl_ValorEsperado) )
THIS.messageout( 'Filename found in filter >> Actual : ' + TRANSFORM(tl_Valor) )
*-- ASSERTIONS
THIS.assertequals( tl_ValorEsperado, tl_Valor, 'Filename found in filter' )
loFoxBin2Prg = NULL
RELEASE loFoxBin2Prg
ELSE
*-- Evaluaci<63>n de errores
THIS.messageout( "Error " + TRANSFORM(toEx.ERRORNO) + ', ' + TRANSFORM(toEx.MESSAGE) )
THIS.messageout( toEx.PROCEDURE + ', ' + TRANSFORM(toEx.LINENO) )
IF NOT INLIST( toEx.ERRORNO, 1098, 2071 ) && Error del usuario (ERROR y THROW)
THIS.messageout( TRANSFORM(toEx.LINECONTENTS) )
ENDIF
THIS.assertequals( tnCodError_Esperado, toEx.ERRORNO, 'Error' )
ENDIF
THIS.messageout( '' )
THIS.messageout( REPLICATE('*',80) )
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__TB2P_xpx
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ;
, loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loFoxBin2Prg.l_Debug = .F.
loFoxBin2Prg.l_ShowErrors = .F.
*loFoxBin2Prg.l_Test = .T.
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError, lnCodError_Esperado
lc_File = 'FB2P_FOXUSER.DBF'
lc_Filtros = 'XX.DBF,FF.FRX,FB2P_*.*'
ll_ValorEsperado = .T.
*-- EVALUACI<43>N DEL TEST
ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros )
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado )
STORE NULL TO loFoxBin2Prg
RELEASE loFoxBin2Prg
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__x_FOXUSERpx
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ;
, loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loFoxBin2Prg.l_Debug = .F.
loFoxBin2Prg.l_ShowErrors = .F.
*loFoxBin2Prg.l_Test = .T.
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError, lnCodError_Esperado
lc_File = 'FB2P_FOXUSER.DBF'
lc_Filtros = 'XX.DBF,FF.FRX,*_FOXUSER.*'
ll_ValorEsperado = .T.
*-- EVALUACI<43>N DEL TEST
ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros )
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado )
STORE NULL TO loFoxBin2Prg
RELEASE loFoxBin2Prg
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_EncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__x_F_Xxpx
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ;
, loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loFoxBin2Prg.l_Debug = .F.
loFoxBin2Prg.l_ShowErrors = .F.
*loFoxBin2Prg.l_Test = .T.
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError, lnCodError_Esperado
lc_File = 'FB2P_FOXUSER.DBF'
lc_Filtros = 'XX.DBF,FF.FRX,*_F?X*.*'
ll_ValorEsperado = .T.
*-- EVALUACI<43>N DEL TEST
ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros )
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado )
STORE NULL TO loFoxBin2Prg
RELEASE loFoxBin2Prg
ENDTRY
ENDFUNC
*******************************************************************************************************************************************
FUNCTION Deberia_NoEncontrarElArchivo__FB2P_FOXUSER_DBF__UsandoElFiltro__uuFxpx
LOCAL lnCodError, lnCodError_Esperado ;
, lc_File, lc_Filtros, ll_Valor, ll_ValorEsperado ;
, loFoxBin2Prg AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ;
, loEx AS EXCEPTION
#IF .F.
PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG'
#ENDIF
TRY
loEx = NULL
loFoxBin2Prg = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG")
*loFoxBin2Prg.l_Debug = .F.
loFoxBin2Prg.l_ShowErrors = .F.
*loFoxBin2Prg.l_Test = .T.
*-- DATOS DE ENTRADA
STORE 0 TO lnCodError, lnCodError_Esperado
lc_File = 'FB2P_FOXUSER.DBF'
lc_Filtros = 'XX.DBF,FF.FRX,??F*.*'
ll_ValorEsperado = .F.
*-- EVALUACI<43>N DEL TEST
ll_Valor = loFoxBin2Prg.FilenameFoundInFilter( lc_File, lc_Filtros )
CATCH TO loEx
FINALLY
THIS.Evaluate_results( loEx, lnCodError_Esperado, ll_Valor, ll_ValorEsperado )
STORE NULL TO loFoxBin2Prg
RELEASE loFoxBin2Prg
ENDTRY
ENDFUNC
ENDDEFINE

View File

@@ -2,7 +2,8 @@
* FOXBIN2PRG v1.19.26
* CONFIGURATION FILE / ARCHIVO DE CONFIGURACI<43>N
*---------------------------------------------------------------------------------------------------
* DON'T MODIFY THIS DOCUMENTATION SECTION / NO MODIFIQUE ESTA SECCI<43>N DE DOCUMENTACI<43>N
* EN: DON'T MODIFY THIS DOCUMENTATION SECTION, MODIFY *UNDER* THIS SECTION
* ES: NO MODIFIQUE ESTA SECCI<43>N DE DOCUMENTACI<43>N, MODIFIQUE *DEBAJO* DE ESTA SECCI<43>N
*
* DETAIL OF SUPPORTED VALUES / DETALLE DE VALORES SOPORTADOS
* If no values given, this are the defaults / Si no se proporcionan valores, estos son los predeterminados
@@ -27,6 +28,8 @@
* DBC_Conversion_Support: 2 && Default value
* DBF_Conversion_Support: 1 && Default value >> EN: FoxBin2Prg support bi-directional convertion of DBFs, but does not keep data. Use with care.
* >> ES: FoxBin2Prg tiene soporte bi-direccional para convertir DBF, pero no mantiene los datos. Usar con cuidado.
* DBF_Conversion_Included: * && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar m<>ltiples m<>scaras de archivo: www,fb2p_free.dbf
* DBF_Conversion_Excluded: && If DBF_Conversion_Support:4, you can specify mnultiple filemasks: www,fb2p_free.dbf / Si DBF_Conversion_Support:4, se pueden indicar m<>ltiples m<>scaras de archivo: www,fb2p_free.dbf
*
* EN: Note: This values have precedence over internal parameters and parameters used on scripts
* ES: Nota: Estos valores tienen precedencia sobre los par<61>metros internos y los par<61>metros usados en los scripts
@@ -35,6 +38,9 @@
****************************************************************************************************
****************************************************************************************************
* YOU CAN MODIFY FROM HERE! / PUEDE MODIFICAR DESDE AQU<51>!
* EN: Uncomment for SourceSafe compatibility. You can change the extension on the right side.
* ES: Descomentar para compatibilidad con SourceSafe. Puede cambiar la extensi<73>n del lado derecho.
*---------------------------------------------------------------------------------------------------
@@ -47,30 +53,3 @@
*extension: db2=dba
*extension: dc2=dca
* EN: Uncomment to activate the new value, comment to deactivate and use the default
* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado
*---------------------------------------------------------------------------------------------------
*DontShowProgress: 1
*DontShowErrors: 1
*NoTimestamps: 0
*Debug: 1
*ExtraBackupLevels: 0
*ClearUniqueID: 0
*OptimizeByFilestamp: 0
*AllowMultiConfig: 0
*DropNullCharsFromCode: 0
* EN: Uncomment to activate the new value, comment to deactivate and use the default
* ES: Descomente para activar el nuevo valor, comente para desactivarlo y usar el predeterminado
* 0=No support, 1=Generate TXT only (Diff), 2=Generate TXT and BIN (Merge)
*---------------------------------------------------------------------------------------------------
*PJX_Conversion_Support: 2
*VCX_Conversion_Support: 2
*SCX_Conversion_Support: 2
*FRX_Conversion_Support: 2
*LBX_Conversion_Support: 2
*MNX_Conversion_Support: 2
*DBC_Conversion_Support: 2
*DBF_Conversion_Support: 2

Binary file not shown.

View File

@@ -23,10 +23,10 @@ _CompanyName = "Fernando D. Bozzo"
_FileDescription = "Conversor bidireccional de binarios FoxPro 9 (scx,vcx,pjx) a texto para sustituir al scctext :-)"
_LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_ProductName = " FOXBIN2PRG v1.19.27"
_ProductName = " FOXBIN2PRG v1.19.28"
_MajorVer = "1"
_MinorVer = "19"
_Revision = "27"
_Revision = "28"
_LanguageID = "1034"
_AutoIncrement = "0"
*</DevInfo>

Binary file not shown.

Binary file not shown.

View File

@@ -94,6 +94,7 @@
* 27/06/2014 FDBOZZO v1.19.26 Mejora: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no deber<65>a), FoxBin2Prg lo procesa igualmente. (Daniel S<>nchez)
* 06/07/2014 FDBOZZO v1.19.26 Bug Fix cfg: ExtraBackupLevel no se tiene en cuenta cuando se usa multi-configuraci<63>n
* 02/06/2014 DH/FDBOZZO v1.19.27 Mejora: Agregado soporte para exportar datos para DIFF (no para importar)
* 21/07/2014 FDBOZZO v1.19.28 Mejora: Agregada funcionalidad para filtrado de tablas y datos cuando se elige DBF_Conversion_Support:4 (Edyshor)
* </HISTORIAL DE CAMBIOS Y NOTAS IMPORTANTES>
*
*---------------------------------------------------------------------------------------------------
@@ -131,6 +132,7 @@
* 02/07/2014 Matt Slay MEJORA v1.19.25: Se filtran algunos CHR(0) de los binarios al tx2, provocando que a veces no sea reconocido como texto. Deber<65>an poderse quitar los NULLs (Arreglado en v1.19.26)
* 27/06/2014 Daniel S<>nchez MEJORA v1.19.25: Si el campo memo "methods" de los vcx/scx contiene asteriscos fuera de lugar (que no deber<65>a), FoxBin2Prg falla. Deber<65>a poder procesarlo igual.
* 02/06/2014 Doug Hennig MEJORA v1.19.22: Agregada funcionalidad para exportar los datos de las tablas al archivo db2 (Agregado en v1.19.27)
* 21/07/2014 Edyshor PROPUESTA DE MEJORA db2 v1.19.27: Ser<65>a <20>til poder filtrar tablas y datos cuando se elige DBF_Conversion_Support:4 (Agregado en v1.19.28)
* </TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS)>
*
*---------------------------------------------------------------------------------------------------
@@ -451,6 +453,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [<memberdata name="ejecutar" display="Ejecutar"/>] ;
+ [<memberdata name="evaluarconfiguracion" display="EvaluarConfiguracion"/>] ;
+ [<memberdata name="exception2str" display="Exception2Str"/>] ;
+ [<memberdata name="filenamefoundinfilter" display="FilenameFoundInFilter"/>] ;
+ [<memberdata name="get_l_cfg_cachedaccess" display="get_l_CFG_CachedAccess"/>] ;
+ [<memberdata name="get_l_configevaluated" display="get_l_ConfigEvaluated"/>] ;
+ [<memberdata name="get_ext2fromext" display="Get_Ext2FromExt"/>] ;
@@ -492,6 +495,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [<memberdata name="lbx_conversion_support" display="LBX_Conversion_Support"/>] ;
+ [<memberdata name="mnx_conversion_support" display="MNX_Conversion_Support"/>] ;
+ [<memberdata name="dbf_conversion_support" display="DBF_Conversion_Support"/>] ;
+ [<memberdata name="dbf_conversion_included" display="DBF_Conversion_Included"/>] ;
+ [<memberdata name="dbf_conversion_excluded" display="DBF_Conversion_Excluded"/>] ;
+ [<memberdata name="dbc_conversion_support" display="DBC_Conversion_Support"/>] ;
+ [<memberdata name="renamefile" display="RenameFile"/>] ;
+ [<memberdata name="tienesoporte_bin2prg" display="TieneSoporte_Bin2Prg"/>] ;
@@ -566,6 +571,8 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
MNX_Conversion_Support = 2
DBF_Conversion_Support = 1
DBC_Conversion_Support = 2
DBF_Conversion_Included = ''
DBF_Conversion_Excluded = ''
PROCEDURE INIT
@@ -832,6 +839,24 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDPROC
PROCEDURE DBF_Conversion_Included_ACCESS
IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) )
RETURN THIS.DBF_Conversion_Included
ELSE
RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).DBF_Conversion_Included, THIS.DBF_Conversion_Included )
ENDIF
ENDPROC
PROCEDURE DBF_Conversion_Excluded_ACCESS
IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) )
RETURN THIS.DBF_Conversion_Excluded
ELSE
RETURN NVL( THIS.o_Configuration( THIS.n_CFG_Actual ).DBF_Conversion_Excluded, THIS.DBF_Conversion_Excluded )
ENDIF
ENDPROC
PROCEDURE DBC_Conversion_Support_ACCESS
IF THIS.n_CFG_Actual = 0 OR ISNULL( THIS.o_Configuration( THIS.n_CFG_Actual ) )
RETURN THIS.DBC_Conversion_Support
@@ -1127,7 +1152,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) )
IF NOT INLIST( TRANSFORM(tcDontShowProgress), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcDontShowProgress = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowProgress: ' + TRANSFORM(tcDontShowProgress) )
ENDIF
CASE LEFT( laConfig(I), 15 ) == LOWER('DontShowErrors:')
@@ -1136,112 +1161,126 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
lcValue = ALLTRIM( SUBSTR( laConfig(I), 16 ) )
IF NOT INLIST( TRANSFORM(tcDontShowErrors), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcDontShowErrors = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDontShowErrors: ' + TRANSFORM(tcDontShowErrors) )
ENDIF
CASE LEFT( laConfig(I), 13 ) == LOWER('NoTimestamps:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 14 ) )
IF NOT INLIST( TRANSFORM(tcNoTimestamps), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcNoTimestamps = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcNoTimestamps: ' + TRANSFORM(tcNoTimestamps) )
ENDIF
CASE LEFT( laConfig(I), 6 ) == LOWER('Debug:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 7 ) )
IF NOT INLIST( TRANSFORM(tcDebug), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcDebug = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcDebug: ' + TRANSFORM(tcDebug) )
ENDIF
CASE LEFT( laConfig(I), 18 ) == LOWER('ExtraBackupLevels:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 19 ) )
IF NOT ISDIGIT( TRANSFORM(tcExtraBackupLevels) ) AND ISDIGIT( lcValue ) THEN
tcExtraBackupLevels = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > tcExtraBackupLevels: ' + TRANSFORM(tcExtraBackupLevels) )
ENDIF
CASE LEFT( laConfig(I), 14 ) == LOWER('ClearUniqueID:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 15 ) )
IF NOT INLIST( TRANSFORM(tcClearUniqueID), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcClearUniqueID = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > ClearUniqueID: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 20 ) == LOWER('OptimizeByFilestamp:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 21 ) )
IF NOT INLIST( TRANSFORM(tcOptimizeByFilestamp), '0', '1' ) AND INLIST( lcValue, '0', '1' ) THEN
tcOptimizeByFilestamp = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > OptimizeByFilestamp: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 17 ) == LOWER('AllowMultiConfig:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 18 ) )
IF INLIST( lcValue, '0', '1' ) THEN
.l_AllowMultiConfig = ( TRANSFORM(lcValue) == '1' )
.writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > AllowMultiConfig: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 22 ) == LOWER('DropNullCharsFromCode:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 23 ) )
IF INLIST( lcValue, '0', '1' ) THEN
.l_DropNullCharsFromCode = ( TRANSFORM(lcValue) == '1' )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DropNullCharsFromCode: ' + TRANSFORM(lcValue) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('PJX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.PJX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > PJX_Conversion_Support: ' + TRANSFORM(lo_CFG.PJX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('VCX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.VCX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > VCX_Conversion_Support: ' + TRANSFORM(lo_CFG.VCX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('SCX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.SCX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > SCX_Conversion_Support: ' + TRANSFORM(lo_CFG.SCX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('FRX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.FRX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > FRX_Conversion_Support: ' + TRANSFORM(lo_CFG.FRX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('LBX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.LBX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > LBX_Conversion_Support: ' + TRANSFORM(lo_CFG.LBX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('MNX_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.MNX_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > MNX_Conversion_Support: ' + TRANSFORM(lo_CFG.MNX_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('DBF_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2', '4' ) THEN
lo_CFG.DBF_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Support: ' + TRANSFORM(lo_CFG.DBF_Conversion_Support) )
ENDIF
CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Included:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) )
IF NOT EMPTY(lcValue) THEN
lo_CFG.DBF_Conversion_Included = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Included: ' + TRANSFORM(lo_CFG.DBF_Conversion_Included) )
ENDIF
CASE LEFT( laConfig(I), 24 ) == LOWER('DBF_Conversion_Excluded:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 25 ) )
IF NOT EMPTY(lcValue) THEN
lo_CFG.DBF_Conversion_Excluded = lcValue
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBF_Conversion_Excluded: ' + TRANSFORM(lo_CFG.DBF_Conversion_Excluded) )
ENDIF
CASE LEFT( laConfig(I), 23 ) == LOWER('DBC_Conversion_Support:')
lcValue = ALLTRIM( SUBSTR( laConfig(I), 24 ) )
IF INLIST( lcValue, '0', '1', '2' ) THEN
lo_CFG.DBC_Conversion_Support = INT( VAL( lcValue ) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) )
.writeLog( JUSTFNAME(lcConfigFile) + ' > DBC_Conversion_Support: ' + TRANSFORM(lo_CFG.DBC_Conversion_Support) )
ENDIF
ENDCASE
@@ -1329,6 +1368,28 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDPROC
FUNCTION FilenameFoundInFilter
*---------------------------------------------------------------------------------------------------
* PAR<41>METROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
* tcFilename (v! IN ) Nombre del archivo a evaluar
* tcFilters (v! IN ) Filtros a evaluar (*,??E.*,R*.*)
*---------------------------------------------------------------------------------------------------
LPARAMETERS tcFilename, tcFilters
LOCAL llFound, laFiltros(1)
tcFilename = UPPER(tcFilename)
FOR I = 1 TO ALINES( laFiltros, tcFilters + ',', 1+4, ',' )
IF LIKE( UPPER(laFiltros(I)), tcFilename )
llFound = .T.
EXIT
ENDIF
ENDFOR
RETURN llFound
ENDFUNC
PROCEDURE Get_Ext2FromExt
LPARAMETERS tcExt
LOCAL lcExt2
@@ -11131,7 +11192,7 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
DODEFAULT( @toModulo, @toEx )
TRY
LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc ;
LOCAL lnCodError, laDatabases(1), lnDatabases_Count, laDatabases2(1), lnLen, lc_FileTypeDesc, laLines(1) ;
, ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, lnDataSessionID, lnSelect ;
, loTable AS CL_DBF_TABLE OF 'FOXBIN2PRG.PRG' ;
, loDBFUtils AS CL_DBF_UTILS OF 'FOXBIN2PRG.PRG'
@@ -11140,6 +11201,22 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
loDBFUtils = CREATEOBJECT('CL_DBF_UTILS')
WITH THIS AS c_conversor_dbf_a_prg OF 'FOXBIN2PRG.PRG'
*-- EVALUAR OPCIONES ESPEC<45>FICAS DE DBF
*-- Include
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Included) AND NOT toFoxBin2Prg.DBF_Conversion_Included == '*' ;
AND NOT toFoxBin2Prg.FilenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Included )
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' no est<73> en el filtro DBF_Conversion_Included (' + toFoxBin2Prg.DBF_Conversion_Included + ')' )
EXIT
ENDIF
*-- Exclude
IF NOT EMPTY(toFoxBin2Prg.DBF_Conversion_Excluded) ;
AND toFoxBin2Prg.FilenameFoundInFilter( JUSTFNAME(.c_InputFile), toFoxBin2Prg.DBF_Conversion_Excluded )
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(.c_InputFile) + ' est<73> en el filtro DBF_Conversion_Excluded (' + toFoxBin2Prg.DBF_Conversion_Excluded + ')' )
EXIT
ENDIF
loDBFUtils.getDBFmetadata( .c_InputFile, @ln_HexFileType, @ll_FileHasCDX, @ll_FileHasMemo, @ll_FileIsDBC, @lc_DBC_Name )
lc_FileTypeDesc = loDBFUtils.fileTypeDescription(ln_HexFileType)
lnDatabases_Count = ADATABASES(laDatabases)
@@ -15900,7 +15977,9 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE
#ENDIF
TRY
LOCAL lcText, lcTableCFG, lcIndexKey, lcIndexFile, loEx AS EXCEPTION ;
LOCAL lcText, lcTableCFG, lcIndexKey, lcIndexFile, laConfig(1), lcValue, lcConfigItem ;
, lc_DBF_Conversion_Order, lc_DBF_Conversion_Condition ;
, loEx AS EXCEPTION ;
, loRecords AS CL_DBF_RECORDS OF 'FOXBIN2PRG.PRG' ;
, loFields AS CL_DBF_FIELDS OF 'FOXBIN2PRG.PRG' ;
, loIndexes AS CL_DBF_INDEXES OF 'FOXBIN2PRG.PRG'
@@ -15932,24 +16011,43 @@ DEFINE CLASS CL_DBF_TABLE AS CL_CUS_BASE
lcText = lcText + loIndexes.toText( '', '', tc_InputFile )
IF toFoxBin2Prg.DBF_Conversion_Support = 4 && BIN2PRG (DATA EXPORT FOR DIFF)
*-- If table CFG exists, use it to order records. FDBOZZO. 2014/06/15
*-- If table CFG exists, use it for DBF-specific configuration. FDBOZZO. 2014/06/15
lcTableCFG = tc_InputFile + '.CFG'
IF FILE(lcTableCFG)
toFoxBin2Prg.writeLog()
toFoxBin2Prg.writeLog('* Found configuration file: ' + lcTableCFG)
lcIndexKey = ALLTRIM( FILETOSTR(lcTableCFG), 0, ' ', CHR(13), CHR(10) )
IF NOT EMPTY(lcIndexKey)
*-- Leer valores de configuraci<63>n
FOR I = 1 TO ALINES( laConfig, FILETOSTR( lcTableCFG ), 1+4 )
lcConfigItem = LOWER( laConfig(I) )
DO CASE
CASE INLIST( LEFT( lcConfigItem, 1 ), '*', '#', '/', "'" )
LOOP
CASE LEFT( lcConfigItem, 21 ) == LOWER('DBF_Conversion_Order:')
lc_DBF_Conversion_Order = ALLTRIM( SUBSTR( laConfig(I), 22 ) )
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(lcTableCFG) + ' -> DBF_Conversion_Order: ' + lc_DBF_Conversion_Order )
CASE LEFT( lcConfigItem, 25 ) == LOWER('DBF_Conversion_Condition:')
lc_DBF_Conversion_Condition = ALLTRIM( SUBSTR( laConfig(I), 26 ) )
toFoxBin2Prg.writeLog(' ' + JUSTFNAME(lcTableCFG) + ' -> DBF_Conversion_Condition: ' + lc_DBF_Conversion_Condition )
ENDCASE
ENDFOR
IF NOT EMPTY(lc_DBF_Conversion_Order)
lcIndexFile = FORCEEXT(tc_InputFile,'IDX')
INDEX ON &lcIndexKey. TO (lcIndexFile) COMPACT
toFoxBin2Prg.writeLog(' > Using Index order key: ' + lcIndexKey)
INDEX ON &lc_DBF_Conversion_Order. TO (lcIndexFile) COMPACT
toFoxBin2Prg.writeLog(' > Using Index order key: ' + lc_DBF_Conversion_Order)
ENDIF
ENDIF
*** DH 06/02/2014: added _Records
loRecords = THIS._Records
lcText = lcText + loRecords.toText(@laFields, lnFieldCount)
lcText = lcText + loRecords.toText(@laFields, lnFieldCount, lc_DBF_Conversion_Condition)
ENDIF
@@ -16548,11 +16646,12 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE
PROCEDURE toText
*---------------------------------------------------------------------------------------------------
* PAR<41>METROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT)
* taFields (@! IN ) Array de informaci<63>n de campos
* tnField_Count (v! IN ) Cantidad de campos
* PAR<41>METROS: (!=Obligatorio | ?=Opcional) (@=Pasar por referencia | v=Pasar por valor) (IN/OUT)
* taFields (@! IN ) Array de informaci<63>n de campos
* tnField_Count (v! IN ) Cantidad de campos
* tc_DBF_Conversion_Condition (v? IN ) Condici<63>n de filtro para la conversi<73>n. Solo se exporta lo que la cumpla.
*---------------------------------------------------------------------------------------------------
LPARAMETERS taFields, tnField_Count
LPARAMETERS taFields, tnField_Count, tc_DBF_Conversion_Condition
EXTERNAL ARRAY taFields
@@ -16567,8 +16666,12 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE
ENDTEXT
loRecord = CREATEOBJECT('CL_DBF_RECORD')
IF EMPTY(tc_DBF_Conversion_Condition)
tc_DBF_Conversion_Condition = '.T.'
ENDIF
SCAN
SCAN FOR &tc_DBF_Conversion_Condition.
lcText = lcText + loRecord.toText(@taFields, tnField_Count)
ENDSCAN
@@ -16579,6 +16682,7 @@ DEFINE CLASS CL_DBF_RECORDS AS CL_COL_BASE
CATCH TO loEx
loEx.UserValue = loEx.UserValue + 'tc_DBF_Conversion_Condition = [' + TRANSFORM(tc_DBF_Conversion_Condition) + ']' + CR_LF
IF THIS.l_Debug AND _VFP.STARTMODE = 0
SET STEP ON
ENDIF
@@ -19644,6 +19748,8 @@ DEFINE CLASS CL_CFG AS CUSTOM
+ [<memberdata name="lbx_conversion_support" display="LBX_Conversion_Support"/>] ;
+ [<memberdata name="mnx_conversion_support" display="MNX_Conversion_Support"/>] ;
+ [<memberdata name="dbf_conversion_support" display="DBF_Conversion_Support"/>] ;
+ [<memberdata name="dbf_conversion_included" display="DBF_Conversion_Included"/>] ;
+ [<memberdata name="dbf_conversion_excluded" display="DBF_Conversion_Excluded"/>] ;
+ [<memberdata name="dbc_conversion_support" display="DBC_Conversion_Support"/>] ;
+ [</VFPData>]
@@ -19652,7 +19758,7 @@ DEFINE CLASS CL_CFG AS CUSTOM
#ENDIF
*--
*-- Configuration class. By default asumes master value, except when overriding one.
c_Foxbin2prg_FullPath = ''
c_Foxbin2prg_ConfigFile = ''
c_CurDir = ''
@@ -19679,6 +19785,8 @@ DEFINE CLASS CL_CFG AS CUSTOM
LBX_Conversion_Support = NULL
MNX_Conversion_Support = NULL
DBF_Conversion_Support = NULL
DBF_Conversion_Included = NULL
DBF_Conversion_Excluded = NULL
DBC_Conversion_Support = NULL