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 608 vezes
- Jairo Maia
- Moderador
- Mensagens: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
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: 2820
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
- Curtiu: 2 vezes
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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 765
- 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: 8028
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 2 vezes
- Curtiram: 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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20415
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
- Curtiram: 1 vez
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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
