Generar Archivo de texto y separar campos con TAB
Moderador: Moderadores
-
victorale07
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 20 Ago 2009 19:55
- Localização: chile
Generar Archivo de texto y separar campos con TAB
Hola:
Necesito generar un archivo de texto y que los campos sean separados por Tabulación TAB.-
Les agradesco.
Necesito generar un archivo de texto y que los campos sean separados por Tabulación TAB.-
Les agradesco.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Generar Archivo de texto y separar campos con TAB
Olá Victor,
De uma forma simples (porque você pode escolher campos, condição e etc também com esse comando) você pode fazer assim:
De uma forma simples (porque você pode escolher campos, condição e etc também com esse comando) você pode fazer assim:
Código: Selecionar todos
Use Sua Tabela New
// Set Order TO nOrder // para uso de algum indice
COPY TO Seu_Arquivo.txt DELIMITED WITH TABAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Generar Archivo de texto y separar campos con TAB
Olá!
Duas coisas:
1- Não sei se o exemplo do Jairo funcionaria com a palavra "TAB", da forma como foi escrito. Pelo que me consta, esta palavra não é reservada. Funcionaria se fosse declarada uma constante com o nome "TAB" 2 - Mesmo funcionando, apenas os campos tipo carácter seriam colocados entre TABs. O separador de campos continuaria a ser a vírgula.
Creio que ele terá que desenvolver uma rotina customizada para conseguir o que quer...
Duas coisas:
1- Não sei se o exemplo do Jairo funcionaria com a palavra "TAB", da forma como foi escrito. Pelo que me consta, esta palavra não é reservada. Funcionaria se fosse declarada uma constante com o nome "TAB"
Código: Selecionar todos
#define TAB Chr(9)
Use Sua Tabela New
// Set Order TO nOrder // para uso de algum indice
COPY TO Seu_Arquivo.txt DELIMITED WITH TABCreio que ele terá que desenvolver uma rotina customizada para conseguir o que quer...
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Generar Archivo de texto y separar campos con TAB
Olá Pessoal,
Alexandre, apenas para registro: compilei aqui com o Clipper puro (usando o cl.bat do Clipper), e obtive o seguinte resultado:
1 - compilando o exemplo na forma que passei, não dá erro, mas não assume o TAB ( chr(9) ) como delimitador, aparecem as vírgulas. O único resultado que funcionou foi trocando o TAB por BLANK, ai sim é exportado limpo.
2 - compilando seu exemplo da mesma forma, o resultado também foi o mesmo.
Creio que a solução será mesmo ele montar uma rotina específica para isso.
NOTA: Apesar do assunto aqui ser Clipper, apenas para informe, no Harbour funciona 100% as opções: TAB PIPE e BLANK, além claro dos limitadores especificados entre aspas conforme conhecemos no Clipper.
Alexandre, apenas para registro: compilei aqui com o Clipper puro (usando o cl.bat do Clipper), e obtive o seguinte resultado:
1 - compilando o exemplo na forma que passei, não dá erro, mas não assume o TAB ( chr(9) ) como delimitador, aparecem as vírgulas. O único resultado que funcionou foi trocando o TAB por BLANK, ai sim é exportado limpo.
2 - compilando seu exemplo da mesma forma, o resultado também foi o mesmo.
Creio que a solução será mesmo ele montar uma rotina específica para isso.
NOTA: Apesar do assunto aqui ser Clipper, apenas para informe, no Harbour funciona 100% as opções: TAB PIPE e BLANK, além claro dos limitadores especificados entre aspas conforme conhecemos no Clipper.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
-
victorale07
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 20 Ago 2009 19:55
- Localização: chile
Generar Archivo de texto y separar campos con TAB
Hola:
Les agradesco por responderme.
Lo que necesito es en cada campo separarlos por tabulaciones, hice una prueba de esta manera:
set printer to ejemplo.txt
set print on
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
set printer to
set print off
return(.t.)
pareciera que esta bien, no se si habra otra manera o alguna funcion.-
Gracias.
Les agradesco por responderme.
Lo que necesito es en cada campo separarlos por tabulaciones, hice una prueba de esta manera:
set printer to ejemplo.txt
set print on
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
? 'campo1' + chr(9)+ 'campo2'+ chr(9)+'campo3'
set printer to
set print off
return(.t.)
pareciera que esta bien, no se si habra otra manera o alguna funcion.-
Gracias.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Generar Archivo de texto y separar campos con TAB
Olá!
Você pode tentar o código abaixo (não testei): Edit: ajustes no código.
Você pode tentar o código abaixo (não testei):
Código: Selecionar todos
#include "Fileio.ch"
#define S_FLD_SEP Chr(9)
#define S_REC_SEP Chr(13) + Chr(10)
PROCEDURE SaveAsTabDelimited( cFile
LOCAL nHandle
LOCAL cFile
LOCAL cMsg
cFile := IF( cFile == NIL, "C:\Teste.Dbf", cFile )
BEGIN SEQUENCE
USE (cFile) EXCLUSIVE NEW ALIAS Teste
IF NetErr()
BREAK( "Problema ao abrir arquivo de Entrada.;Erro " + LTrim( Str( FERROR() ) ) )
ENDIF
IF (nHandle := FCREATE("Test.Txt", FC_NORMAL)) == -1
BREAK( "Problema ao criar arquivo de saída.;Erro " + LTrim( Str( FERROR() ) ) )
ENDIF
Teste->( DbGoTop(), ;
DbEval( {|| FWrite( nHandle, RecordAsString() + S_REC_SE ) } );
)
RECOVER USING cMsg
Alert( cMsg )
END SEQUENCE
IF nHandle > 0
FClose( nHandle )
ENDIF
Teste->( DbClosearea() )
RETURN
//------------------------------------------------------------------------------
FUNCTION RecordAsString()
LOCAL cString
LOCAL nFCount
LOCAL cValtype
LOCAL xVal
nFCount := FCount()
cString := ""
FOR nPos := 1 TO nFCount
cValType := ValType( ( xVal := FieldGet( nPos ) ) )
DO CASE
CASE cValType == "C" .Or. cValType == "M"
cString += '"' + xVal + '"'
CASE cValType == "N"
cString += LTrim( Str(xVal) )
CASE cValType == "D"
cString += '"' + DtoS(xVal) + '"'
CASE cValType == "L"
cString += '"' + IF( xVal, "T", "F" ) + '"'
END CASE
cString += S_FLD_SEP
NEXT
RETURN cString
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
victorale07
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 20 Ago 2009 19:55
- Localização: chile
Generar Archivo de texto y separar campos con TAB
Hola:
Gracias alxsts, por la rutina.
Voy a probarla en mi sistema.
atentamente.
Gracias alxsts, por la rutina.
Voy a probarla en mi sistema.
atentamente.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Generar Archivo de texto y separar campos con TAB
Olá!
Não te esqueça que se você gerar um arquivo neste formato, o sistema que vai lê-lo terá que reconhecer este formato. Não conheço nada que faça isto. Portanto, provavelmente será necessário criar outra rotina para fazer a leitura do mesmo.
É realmente necessário criar este arquivo com campos separados por TABs?
Não te esqueça que se você gerar um arquivo neste formato, o sistema que vai lê-lo terá que reconhecer este formato. Não conheço nada que faça isto. Portanto, provavelmente será necessário criar outra rotina para fazer a leitura do mesmo.
É realmente necessário criar este arquivo com campos separados por TABs?
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
victorale07
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 20 Ago 2009 19:55
- Localização: chile
Generar Archivo de texto y separar campos con TAB
Hola alxsts
Si, es necesario ya que la informacion hay que exportarla a otro software, el cual lo valida de esa manera.-
lo voy a probar.
Muchas gracias.
Si, es necesario ya que la informacion hay que exportarla a otro software, el cual lo valida de esa manera.-
lo voy a probar.
Muchas gracias.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Generar Archivo de texto y separar campos con TAB
Olá!
Victor: na rotina que escrevi, os campos estão separados por TAB e os campos char, date e logical estão entre aspas duplas. Os campos numéricos não estão delimitados por aspas. Exemplo: ( "ejemplo"TAB"20130518"TAB123TAB"F"TABCRLF).
Verifique como o software que vai ler este arquivo diferencia os campos char, date, numeric e logical. Se for de forma diferente da que está no exemplo, creio que não será difícil modificar o exemplo.
Victor: na rotina que escrevi, os campos estão separados por TAB e os campos char, date e logical estão entre aspas duplas. Os campos numéricos não estão delimitados por aspas. Exemplo: ( "ejemplo"TAB"20130518"TAB123TAB"F"TABCRLF).
Verifique como o software que vai ler este arquivo diferencia os campos char, date, numeric e logical. Se for de forma diferente da que está no exemplo, creio que não será difícil modificar o exemplo.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
victorale07
- Usuário Nível 2

- Mensagens: 67
- Registrado em: 20 Ago 2009 19:55
- Localização: chile
Generar Archivo de texto y separar campos con TAB
Hola alxsts:
El software dice textualmente lo siguiente:
( La captura se hace a travez de un archivo de texto, con columnas y campos separados por tabulaciones.
Este archivo se puede preparar en Excel, grabando en formato "texto separado por tabulaciones". Se asume que el
primer registro contiene nombres de campos. )
Pero la idea es poder emitir este archivo de texto desde el programa hecho en clipper 5.2e.-
Creo que me puede servir lo que me enviastes, pero tengo que testearlo enviando el archivo ya creado al cliente que me lo ha pedido.
Gracias.
El software dice textualmente lo siguiente:
( La captura se hace a travez de un archivo de texto, con columnas y campos separados por tabulaciones.
Este archivo se puede preparar en Excel, grabando en formato "texto separado por tabulaciones". Se asume que el
primer registro contiene nombres de campos. )
Pero la idea es poder emitir este archivo de texto desde el programa hecho en clipper 5.2e.-
Creo que me puede servir lo que me enviastes, pero tengo que testearlo enviando el archivo ya creado al cliente que me lo ha pedido.
Gracias.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Generar Archivo de texto y separar campos con TAB
Olá!
Victor:
fiz algumas alterações na rotina, baseadas nas últimas informações que você postou. Testei e abri o arquivo de saída com Excel 2010. Funcionou.
Espero que atenda a tua necessidade.
Victor:
fiz algumas alterações na rotina, baseadas nas últimas informações que você postou. Testei e abri o arquivo de saída com Excel 2010. Funcionou.
Espero que atenda a tua necessidade.
Código: Selecionar todos
//------------------------------------------------------------------------------
//
// Função : SaveAsTabDelimited - Lê um arquivo .DBF e exporta para arquivo
// texto com os campos separados por tabulações
// (Compatível com MS-Excel)
// Autor : Alexandre Santos - 20/05/2013
//
//------------------------------------------------------------------------------
#include "Set.ch"
#include "Fileio.ch"
#define S_FLD_SEP Chr(9)
#define S_REC_SEP Chr(13) + Chr(10)
PROCEDURE SaveAsTabDelimited( cFile )
LOCAL nHandle
LOCAL cMsg
LOCAL cSaveDate := Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
SetMode( 25,80 )
// ALTD()
BEGIN SEQUENCE
IF Empty( cFile )
BREAK( "Problema ao abrir arquivo de Entrada.;Erro " + LTrim( Str( FERROR() ) ) )
ENDIF
USE (cFile) EXCLUSIVE NEW ALIAS Teste
IF NetErr()
BREAK( "Problema ao abrir arquivo de Entrada.;Erro " + LTrim( Str( FERROR() ) ) )
ENDIF
IF (nHandle := FCREATE("Test.Txt", FC_NORMAL)) == -1
BREAK( "Problema ao criar arquivo de saída.;Erro " + LTrim( Str( FERROR() ) ) )
ENDIF
Teste->( DbGoTop(), ;
FWrite( nHandle, RecordAsString( .T. ) + S_REC_SEP ), ; // Grava cabeçalho do Txt com nomes das colunas
DbEval( {|| FWrite( nHandle, RecordAsString() + S_REC_SEP ) } ), ; // grava os registros
Teste->( DbClosearea() ) ;
)
RECOVER USING cMsg
Alert( cMsg )
END SEQUENCE
IF nHandle > 0
FClose( nHandle )
ENDIF
// Restaura formato de data anterior
Set( _SET_DATEFORMAT, cSaveDate )
RETURN
//------------------------------------------------------------------------------
FUNCTION RecordAsString( lHeader )
LOCAL cString
LOCAL nFCount
LOCAL cValtype
LOCAL xVal
lHeader := IF( lHeader == NIL, .F., lHeader )
nFCount := FCount()
cString := ""
FOR nPos := 1 TO nFCount
IF ! lHeader
// Adiciona conteúdo dos campos
cValType := ValType( ( xVal := FieldGet( nPos ) ) )
DO CASE
CASE cValType == "C" .Or. cValType == "M"
cString += RTrim( xVal )
CASE cValType == "N"
cString += LTrim( Str(xVal) )
CASE cValType == "D"
cString += DtoC(xVal)
CASE cValType == "L"
cString += IF( xVal, "Sim,", "Não" )
END CASE
ELSE
// Adiciona nome do campo
cString += FieldName( nPos )
ENDIF
// Adiciona separador de campo (TAB), exceto para o último campo
IF nPos != nFCount
cString += S_FLD_SEP
ENDIF
NEXT
RETURN cString
//------------------------------------------------------------------------------[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)