Arquivo TXT
Moderador: Moderadores
Arquivo TXT
Boa tarde.
Como preencher nas 2 ultimas posições de cada linha de um arquivo TXT com asc(13) + ASC(10), como assinalado na pagina 1 e 3 do arquivo anexado.
Obrigado
Como preencher nas 2 ultimas posições de cada linha de um arquivo TXT com asc(13) + ASC(10), como assinalado na pagina 1 e 3 do arquivo anexado.
Obrigado
- Anexos
-
ISSWeb_layout.pdf- (516.31 KiB) Baixado 602 vezes
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Arquivo TXT
Olá marsp,
Em Clipper acho que mais fácil seria dessa forma:
Em Clipper acho que mais fácil seria dessa forma:
Código: Selecionar todos
Local cLinha
SET DEVICE TO PRINTER
SET PRINTER TO "Teste.Txt"
@ pRow()+0, 0 Say "Teste de linha texto 1"
@ pRow()+1, 0 Say "Teste de linha texto 2"
@ pRow()+1, 0 Say "Teste de linha texto 3"
@ pRow()+1, 0 Say "Teste de linha texto 4"
SET DEVICE TO SCREEN
SET PRINTER TO
RUN Teste.txtAbraç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)
Arquivo TXT
Obrigado Jairo por responder.
Mas o que quero, é que nas 2 ultimas posições (79 e 80) de uma linha por exemplo de 80 caracteres dentro de um arquivo texto seja preenchido com 2 caracteres que represente o asc(13) e asc(10) ou chr(13) e chr(10).
Mas o que quero, é que nas 2 ultimas posições (79 e 80) de uma linha por exemplo de 80 caracteres dentro de um arquivo texto seja preenchido com 2 caracteres que represente o asc(13) e asc(10) ou chr(13) e chr(10).
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Arquivo TXT
Olá Marsp,
Da forma que coloquei, ele faz isso. a sequência de caracteres Chr( 13 ) + Chr( 10 ) representa a quebra de linha e retorno de carro. Isso é o que está dizendo seu leiaute. a Linha precisa ser finalizada com os caracteres para Windows, que são esses.
Ou você já tem um texto retilíneo e quer quebrar as linhas?
Da forma que coloquei, ele faz isso. a sequência de caracteres Chr( 13 ) + Chr( 10 ) representa a quebra de linha e retorno de carro. Isso é o que está dizendo seu leiaute. a Linha precisa ser finalizada com os caracteres para Windows, que são esses.
Ou você já tem um texto retilíneo e quer quebrar as linhas?
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Arquivo TXT
Há diversas formas, depende de como vai gerar o txt.
que pode ser melhorado usando função ou #define
Tem também fOpen(), fWrite(), que grava em disco.
Tem esse que foi mencionado.
Dependendo da opção, pode ser necessário no final fOpen(), fSeek(), fWrite() pra eliminar o Chr(26) que indica fim de arquivo, pra ficar compatível com Windows.
Se o arquivo ficar limitado a 64kb, que é o limite do Clipper pra string, pode criar em TXT e gravar no final.
E por aí vai.
No caso de #define, o CRLF é substituído por Chr(13) + Chr(10), o que deixa o EXE grande.
No caso de função CrLf(), pode reduzir o tamanho do EXE, por eliminar todos os Chr(13)+Chr(10) que existiriam nos fontes.
Se preferir, pode até usar como nome hb_Eol() que é o mesmo usado no Harbour, assim o fonte fica pronto pra Harbour.
Lembrando que isto também é possível
?? indica que a saída será em sequência ao texto atual
? indica que vai pular uma linha ANTES do texto atual
Por isso, pra não ter uma linha em branco no início, o primeiro tem que ser ??
E um ? no final pra encerrar a última linha
Código: Selecionar todos
SET ALTERNATE TO TEXTO.TXT
SET ALTERNATE ON
SET CONSOLE OFF
?? "sxxxx" + "XXXXX" + Chr(13) + Chr(10)
SET CONSOLE OFF
SET ALTERNATE OFF
SET ALTERNATE TO
Código: Selecionar todos
#define CRLF Chr(13) + Chr(10)
?? "Texto" + CRLF
?? "outro texto" + CRLF
?? "Texto" + CrLf()
?? "outro texto" + CrLf()
FUNCTION CrLf()
RETURN Chr(13) + Chr(10)
Tem esse que foi mencionado.
Dependendo da opção, pode ser necessário no final fOpen(), fSeek(), fWrite() pra eliminar o Chr(26) que indica fim de arquivo, pra ficar compatível com Windows.
Se o arquivo ficar limitado a 64kb, que é o limite do Clipper pra string, pode criar em TXT e gravar no final.
Código: Selecionar todos
cTxt := ""
cTxt += "linha1" + CrLf()
cTxt += "linha2" + CrLf()
MemoWrit( "texto.txt", cTxt )
No caso de #define, o CRLF é substituído por Chr(13) + Chr(10), o que deixa o EXE grande.
No caso de função CrLf(), pode reduzir o tamanho do EXE, por eliminar todos os Chr(13)+Chr(10) que existiriam nos fontes.
Se preferir, pode até usar como nome hb_Eol() que é o mesmo usado no Harbour, assim o fonte fica pronto pra Harbour.
Lembrando que isto também é possível
Código: Selecionar todos
?? "texto"
? "outro texto"
?
? indica que vai pular uma linha ANTES do texto atual
Por isso, pra não ter uma linha em branco no início, o primeiro tem que ser ??
E um ? no final pra encerrar a última linha
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Arquivo TXT
Pra ilustrar, uma geração de NFE em txt, que tenho aqui:
Ah sim, pra deixar Chr(13) + Chr(10) exatamente na posição 80, se a linha não tem 80 colunas, talvez assim:
Código: Selecionar todos
#define FO_READWRITE 2
#define FS_END 2
SET ALTERNATE TO ( mTxtNfe )
SET ALTERNATE ON
SET CONSOLE OFF
?? "NOTA FISCAL"
?? mTraco
?? "1" // Qtde de notas fiscais no arquivo
?? mTraco
?? " "
?? hb_eol()
mChaveDigital := ;
"35" + ; // UF Ibge
Substr( Dtos( Date() ), 3, 4 ) + ; // AnoMes
SoNumeros( mECnpj ) + ; // Cnpj
"55" + ; // Modelo de Docto Fiscal
"001" + ; // Serie Docto Fiscal
StrZero( notas->Nf, 9 ) + ; // NF
"1" + ;
Right( StrZero( notas->Cod, 10 ), 3 ) + StrZero( notas->Cod, 5 ) // Chave Aleatoria
mChaveDigital := mChaveDigital + CalculaDigito( mChaveDigital, "11" )
// ---------- (NOTAFISCAL-A)
?? "A"
?? mTraco
?? "3.10" // 1 a 4 digitos versao do layout
?? mTraco
?? "NFe" + mChaveDigital // na exportação vai ser seguido da chave digital, na importação tanto faz se tem chave digital
?? mTraco
?? " "
?? hb_eol()
...
SET CONSOLE ON
SET ALTERNATE OFF
SET ALTERNATE TO
// Deixa Ctrl-Z no final da ultima linha
mHandle := fOpen( mTxtNfe, FO_READWRITE )
FSeek( mHandle, -3, FS_END )
fWrite( mHandle, " " )
fClose( mHandle )
Ah sim, pra deixar Chr(13) + Chr(10) exatamente na posição 80, se a linha não tem 80 colunas, talvez assim:
Código: Selecionar todos
cTexto := ""
cTexto += "campo1"
cTexto += "Campo2"
?? Pad( cTexto, 80 ) + hb_Eol()
...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Arquivo TXT
E uma geração do Itaú, onde preferi colocar observação no início da linha pra indicar posição no txt.
Pode ser interessante pra procurar problema depois.
Nota: Valem no Clipper 5.x e no Harbour. No caso do Clipper, só criar a função hb_Eol() como já coloquei antes.
Pode ser interessante pra procurar problema depois.
Código: Selecionar todos
/* 001 */ cTxt += "0"
/* 002 */ cTxt += "1"
/* 003 */ cTxt += "REMESSA"
/* 010 */ cTxt += "01"
/* 012 */ cTxt += Pad( "COBRANCA", 15 )
/* 027 */ cTxt += cBancoAgencia
/* 031 */ cTxt += "00"
/* 033 */ cTxt += Substr( cBancoConta, 1, Len( cBancoConta ) - 1 )
/* 038 */ cTxt += Substr( cBancoConta, Len( cBancoConta ), 1 )
/* 039 */ cTxt += Space(8)
/* 047 */ cTxt += cEmpresaNome
/* 077 */ cTxt += cBancoCodigo
/* 080 */ cTxt += cBancoNome
/* 095 */ cTxt += StrZero( Day( dDataProcesso ), 2 ) + StrZero( Month( dDataProcesso ), 2 ) + StrZero( Year( dDataProcesso ) - 2000, 2 )
/* 101 */ cTxt += Space(294)
/* 395 */ cTxt += StrZero( nSequencial++, 6 )
cTxt += hb_eol()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
Arquivo TXT
amigo quintas como faz para deixar alinhados os valores?
por exemplo "123" + Spac(02)+trans(1000,"@E999.99")
se eu diminuir o 123 por so "12" o valor desalinha indo para o lado esquerdo
como fazer dessa forma que vc fez mais como coluna fixa ? por exemplo:
mesmo que um valor se altere as colunas fiquem "fixas" acho que deu pra entender
por exemplo "123" + Spac(02)+trans(1000,"@E999.99")
se eu diminuir o 123 por so "12" o valor desalinha indo para o lado esquerdo
como fazer dessa forma que vc fez mais como coluna fixa ? por exemplo:
Código: Selecionar todos
linha:= PRow()
@ linha, 7 say grupo + sub_grupo + codigo + ;
"-" + SubStr(produto, 1, 26) picture "@!"
@ linha, 42 say preco / qtd picture "9,999.99" // aqui sempre vai estar na linha 42, tem como fazer isso usando o exemplo seu citado a cima?mesmo que um valor se altere as colunas fiquem "fixas" acho que deu pra entender
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Arquivo TXT
Olá!
Use a função pad("campo variavel",30). Fixa o campo variável em 30
Saudações,
Itamar M. Lins Jr
Use a função pad("campo variavel",30). Fixa o campo variável em 30
Saudações,
Itamar M. Lins Jr
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Arquivo TXT
Código: Selecionar todos
trans(1000,"@E999.99")
Essa integração é com ponto decimal, vírgula, ou nenhum dos dois?
Geralmente txt é com zeros e sem vírgula/ponto.
Código: Selecionar todos
StrZero( 1000.00 * 100, 6 )
Confirme como deve ser o txt.
StrZero( 1000, 4, 2 )
StrZero( 1000, 6, 2 )
StrZero( 1000 * 100, 6, 2 )
Str( 1000, 4, 2 )
Confirmar:
1 - Se é ponto, vírgula, ou números sem decimais multiplicado por 100/
2 - Se é com espaços em branco ou se com zeros.
3 - Confirmar o tamanho, porque usou um tamanho menor que o número
Ah sim, o transform() também acrescenta separação de milhar, além das decimais, o que dá mais um caractere.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Arquivo TXT
Pegando seu exemplo
Pra não fazer conta:
Código: Selecionar todos
@ linha, 7 say grupo + sub_grupo + codigo + ;
"-" + SubStr(produto, 1, 26) picture "@!"
@ linha, 42 say preco / qtd picture "9,999.99" // aqui sempre vai estar na linha 42, tem como fazer isso
Código: Selecionar todos
Pad(
Space(7) +
grupo +
sub_grupo +
codigo
+ "."
+ Substr( PRODUTO, 1, 26 )
, 42 )
+ Transform( preco / qtd, "9,999.99" )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
