Na época, montei esta função, para substituir o Copy To, que exportava para o Bradesco.
alguns exemplos de uso:
TMP->( CopyToSDF() )
TMP->( CopyToSDF('BRADESCO.TXT') )
CopyToSDF()
CopyToSDF('BRADESCO.TXT')
/***************************************************************************
CopyToSDF( , [] ) ==> lSuccess
Descricao: Exporta registros para um arquivo ASCII.
****************************************************************************/
FUNCTION CopyToSDF( cFileTarget, aFields, cDelimiter ) // --> lSuccess
LOCAL nFCreate,nRecno
LOCAL lSucess
LOCAL cAlias
Local nFields
cDelimiter := If ( cDelimiter == Nil, "", cDelimiter )
cFileTarget:=STRTRAN( IF( cFileTarget == NIL, ALIAS() + ".TXT", cFileTarget ), " ")
cFileTarget+=IF( AT( ".", cFileTarget ) = 0 .OR. RAT("\", cFileTarget) > RAT(".", cFileTarget), ".TXT", "" )
cFileTarget:=LOWER( cFileTarget )
cAlias :=ALIAS()
lSucess:=.F.
IF aFields == NIL
aFields:={}
AEVAL( DbStruct(), { |x| AADD( aFields, x[1] )} )
ENDIF
nFields := Len(aFields)
IF ! EMPTY(cAlias) .AND. (nFCreate:=FCREATE( cFileTarget ) ) > 0
nRecno:=RECNO()
AEVAL( aFields, {|x,y| aFields[y]:=FIELDWBLOCK( x, SELECT(cAlias) ) } )
DbGoTop()
DO WHILE ! EOF()
If !Empty(cDelimiter)
AEVAL( aFields, {|x,z,y|y:=EVAL(x), FWRITE( nFCreate, AllTrim(TRANSFORM( IF(VALTYPE(y) = "D", DTOS(y), y ), "")) + If ( z < nFields, cDelimiter, "") ) } )
Else
AEVAL( aFields, {|x,y|y:=EVAL(x), FWRITE( nFCreate, TRANSFORM( IF(VALTYPE(y) = "D", DTOS(y), y ), "") ) } )
Endif
FWRITE( nFCreate, CRLF )
DbSkip()
ENDDO
DbGoTo( nRecno )
FCLOSE( nFCreate )
lSucess:=.T.
ENDIF
RETURN lSucess
//***************************************************************
Virtualmente,
Éric
xHarbour.org 0.99.71 / FiveWin 2.8 / 6.12 / Pelles C / HBMake