FoxBin2Prg v1.19.47 Preview-3

- Agregado soporte de memos multi-linea, para evitar comprimirlos en una sola y poder comparar mejor
This commit is contained in:
fdbozzo
2016-06-06 01:53:04 +02:00
parent 0259e0bbb7
commit b9309770cd
2 changed files with 36 additions and 27 deletions

Binary file not shown.

View File

@@ -23928,7 +23928,7 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
.set_Line( @tcLine, @taCodeLines, I ) .set_Line( @tcLine, @taCodeLines, I )
DO CASE DO CASE
CASE EMPTY( tcLine ) CASE EMPTY( tcLine ) OR LEFT(tcLine, 1) == '*'
LOOP LOOP
CASE C_RECORD_F $ tcLine && Fin CASE C_RECORD_F $ tcLine && Fin
@@ -23938,26 +23938,26 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
*-- Estructura a reconocer: *-- Estructura a reconocer:
* <fieldName>VALOR</fieldName> * <fieldName>VALOR</fieldName>
lcFieldName = STREXTRACT( tcLine, '<', '>', 1, 0 ) lcFieldName = STREXTRACT( tcLine, '<', '>', 1, 0 )
lcValue = STREXTRACT( tcLine, '<' + lcFieldName + '>', '</' + lcFieldName + '>', 1, 0 ) lcValue = STREXTRACT( tcLine, '<' + lcFieldName + '>', '</' + lcFieldName + '>', 1, 0+2 )
loField = toFields.Item(lcFieldName) loField = toFields.Item(lcFieldName)
lcFieldType = loField._Type lcFieldType = loField._Type
llNoCPTran = CAST( loField._NoCPTran as Logical) llNoCPTran = CAST( loField._NoCPTran as Logical)
DO CASE DO CASE
CASE lcFieldType == 'L' CASE lcFieldType == 'L' && Logical (Boolean)
luValue = CAST(lcValue as Logical) luValue = CAST(lcValue as Logical)
CASE lcFieldType == 'G' CASE lcFieldType == 'G' && General (NOT SUPPORTED)
luValue = '' luValue = ''
CASE lcFieldType == 'W' CASE lcFieldType == 'W' && Blob (Memo binario)
luValue = STRCONV(lcValue,14) luValue = STRCONV(lcValue,14)
CASE lcFieldType == 'Q' CASE lcFieldType == 'Q' && Varbinary
luValue = STRCONV(lcValue,14) luValue = STRCONV(lcValue,14)
CASE lcFieldType == 'V' CASE lcFieldType == 'V' && Varchar
IF llNoCPTran IF llNoCPTran
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(lcValue,14) luValue = STRCONV(lcValue,14)
@@ -23965,36 +23965,46 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
luValue = .Decode(lcValue) luValue = .Decode(lcValue)
ENDIF ENDIF
CASE lcFieldType == 'M' CASE lcFieldType == 'M' && Memo
IF llNoCPTran IF llNoCPTran
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(lcValue,14) luValue = STRCONV(lcValue,14)
ELSE ELSE
luValue = .Decode(RTRIM(lcValue), .F.) * Si el memo es multi-l<>nea, leer hasta encontrar el final ']]>' del CDATA.
DO WHILE .T.
IF ']]>' $ tcLine THEN
luValue = .Decode(lcValue, .T.)
EXIT
ELSE
I = I + 1
.set_Line( @tcLine, @taCodeLines, I )
lcValue = lcValue + CR_LF + tcLine
ENDIF
ENDDO
ENDIF ENDIF
CASE lcFieldType == 'D' CASE lcFieldType == 'D' && Date
luValue = CAST(lcValue as Date) luValue = CAST(lcValue as Date)
CASE lcFieldType == 'T' CASE lcFieldType == 'T' && Datetime
luValue = CAST(lcValue as DateTime) luValue = CAST(lcValue as DateTime)
CASE lcFieldType == 'Y' CASE lcFieldType == 'Y' && Currency
luValue = CAST(lcValue as Currency) luValue = CAST(lcValue as Currency)
CASE lcFieldType == 'I' CASE lcFieldType == 'I' && Integer
luValue = CAST(lcValue as Integer) luValue = CAST(lcValue as Integer)
CASE lcFieldType == 'B' CASE lcFieldType == 'B' && Double
luValue = CAST(lcValue as Double) luValue = CAST(lcValue as Double)
CASE lcFieldType == 'F' CASE lcFieldType == 'F' && Float
luValue = CAST(lcValue as Float) luValue = CAST(lcValue as Float)
CASE lcFieldType == 'N' CASE lcFieldType == 'N' && Numeric
luValue = CAST(lcValue as Numeric) luValue = CAST(lcValue as Numeric)
OTHERWISE && Asume 'C' OTHERWISE && Asume 'C' && Character
IF llNoCPTran IF llNoCPTran
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(lcValue,14) luValue = STRCONV(lcValue,14)
@@ -24071,13 +24081,13 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
OR lcFieldType $ 'DT' AND luValue == {} ; OR lcFieldType $ 'DT' AND luValue == {} ;
OR lcFieldType $ 'YIBFN' AND luValue == 0 OR lcFieldType $ 'YIBFN' AND luValue == 0
CASE lcFieldType == 'W' CASE lcFieldType == 'W' && Blob (Memo binario)
luValue = STRCONV(luValue,13) luValue = STRCONV(luValue,13)
CASE lcFieldType == 'Q' CASE lcFieldType == 'Q' && Varbinary
luValue = STRCONV(luValue,13) luValue = STRCONV(luValue,13)
CASE lcFieldType == 'V' CASE lcFieldType == 'V' && Varchar
IF llNoCPTran THEN IF llNoCPTran THEN
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(luValue,13) luValue = STRCONV(luValue,13)
@@ -24085,7 +24095,7 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
luValue = .Encode(luValue) luValue = .Encode(luValue)
ENDIF ENDIF
CASE lcFieldType $ 'C' CASE lcFieldType $ 'C' && Character
IF llNoCPTran THEN IF llNoCPTran THEN
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(luValue,13) luValue = STRCONV(luValue,13)
@@ -24093,12 +24103,12 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
luValue = .Encode(RTRIM(luValue)) luValue = .Encode(RTRIM(luValue))
ENDIF ENDIF
CASE lcFieldType $ 'M' CASE lcFieldType $ 'M' && Memo
IF llNoCPTran THEN IF llNoCPTran THEN
*-- If NoCPTran, then must encode in b64binary *-- If NoCPTran, then must encode in b64binary
luValue = STRCONV(luValue,13) luValue = STRCONV(luValue,13)
ELSE ELSE
luValue = .Encode(RTRIM(luValue), .F.) luValue = .Encode(RTRIM(luValue), .T.)
ENDIF ENDIF
ENDCASE ENDCASE
@@ -24130,7 +24140,8 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
LPARAMETERS tcString, tl_isCDATA LPARAMETERS tcString, tl_isCDATA
LOCAL lcString LOCAL lcString
IF tl_isCDATA THEN IF tl_isCDATA THEN
lcString = '<![CDATA[' + STRTRAN(tcString, ']]>', ']]]]><![CDATA[>') + ']]>' *lcString = '<![CDATA[' + STRTRAN(tcString, ']]>', ']]]]><![CDATA[>') + ']]>'
lcString = '<![CDATA[' + STRTRAN( STRTRAN( tcString, '<![CDATA[', '&lt;![CDATA['), ']]>', ']]&gt;') + ']]>'
ELSE ELSE
lcString = STRTRAN(tcString, '&', '&amp;') lcString = STRTRAN(tcString, '&', '&amp;')
lcString = STRTRAN(lcString, '>', '&gt;') lcString = STRTRAN(lcString, '>', '&gt;')
@@ -24149,9 +24160,7 @@ DEFINE CLASS CL_DBF_RECORD AS CL_CUS_BASE
LPARAMETERS tcString, tl_isCDATA LPARAMETERS tcString, tl_isCDATA
LOCAL lcString LOCAL lcString
IF tl_isCDATA THEN IF tl_isCDATA THEN
lcString = STREXTRACT( ; lcString = STRTRAN( STRTRAN( STREXTRACT( tcString, '<![CDATA[', ']]>'), '&lt;![CDATA[', '<![CDATA['), ']]&gt;', ']]>')
STRTRAN(tcString, ']]]]><![CDATA[>', ']]>') ;
, '<![CDATA[', ']]>')
ELSE ELSE
lcString = STRTRAN(tcString, '&#9;', CHR(9)) lcString = STRTRAN(tcString, '&#9;', CHR(9))
lcString = STRTRAN(lcString, '&#10;', CHR(10)) lcString = STRTRAN(lcString, '&#10;', CHR(10))