Quebra de linha

16 respostas
Yago_Ernandes

Quando envio mensagens pra um microterminal (de um projeto que estou fazendo), tu do fica na mesma linha, fazendo com que saia do espaço da tela…

Se for de alguma ajuda o código que uso pra limpar a tela é o seguinte:

os.writeUTF("\u001B"+"[H"+"\u001B"+"[J");

Pode ser que seja parecido…

Algém pode me ajudar?

16 Respostas

matheuslmota

Cara, vai depender da programação do display do microterminal. Você tem que enviar algum caracter de quebra de linha para o microterminal, mais ai você tem que ver no manual do equipamento para saber qual é o caracter.

matheuslmota

Se servir, o caracter de quebra de linha, de acordo com a tabela Ascii, é o 0x0A.
Você teria de enviar algo mais ou menos assim:

os.writeUTF("\u000A");
Yago_Ernandes

Quando eu coloco isso:

os.writeUTF("\u000A");

da o seguinte erro:

unclosed string literal

me parece que o código do enter é o 13 que mudando colocando em ascii ficaria \u000D. Mas ai da o mesmo erro

Yago_Ernandes

E o microterminal é utilizado como comanda eletrônica, eu que estou mudando sua finalidade, portanto não tem nada referente a isso no manual.

ViniGodoy

\u000A é o caracter do \n.

Esse código aqui são dos terminais ansi (note que não é necessário separar os \u em outras Strings):

"\u001B[H\u001B[J"

Provavelmente você está usando um terminal VT100 ansi, certo?
Se quiser uma lista completa:
http://www.termsys.demon.co.uk/vtansi.htm

Portanto, provavelmente o código seria:
<ESC>[{COUNT}B

Ou seja:

"\u001B[1B"
Yago_Ernandes

Não funcionou, ao invés de quebrar linha ele imprimiu na tela [{1B

E é isso ai, o terminal é VT100 ansi mesmo…

Yago_Ernandes

No caso dessa página ai que você me passou se eu quiser usar o código “[7h” que é para quebrar a linha quando for passar da área de visualização, como eu devo mandar o código? Seria \u001B[7h mesmo?

ViniGodoy

Faltou fechar as chaves.

"\u001B[{1}B"

Cuidado que nem todo terminal suporta todos os comandos.

ViniGodoy

Ah, sorry, agora que vi que as chaves não são necessárias:

"\u001B[1B"
Yago_Ernandes

Continuou só imprimindo na tela o [1B

ViniGodoy

Então seu terminal não suporta navegação de cursor.

Já tentou enviar a quebra de linha? Tente dessas duas formas:

os.writeUTF("\n");
os.writeUTF("\r\n");

Todos os terminais que trabalhei suportavam pelo menos uma delas.

ViniGodoy

Você viu que para apagar a tela você poderia usar somente:

"\u001B[2J"
Yago_Ernandes

O \n não funcionou, ele foi minha primeira tentativa ^^

Agora o \r\n funcionou parcialmente, no seguinte código:

os.writeUTF("Pula"); os.writeUTF("\r\n"); os.writeUTF("Linha");

ele retornou um quadradinho de caractere inválido depois a palavra Pula e depois mais nada, e só mostrou a metade de baixo, o resto ficou pra cima da area de visualização da tela…

pra limpar a tela só funciona o código lá de cima, esse “\u001B[2J” não funcionou.

ViniGodoy

O que mostra que seu terminar VT100 é extremamente capado.
Se ele está ignorando os \n, e não suportou a navegação do cursor, não há muito o que fazer.

Ou então, vc está fazendo algo errado. O ideal seria usar algum programa (como o wireshark) para inspecionar o canal e certificar-se de que vc está enviando o que pensa estar enviando.

Yago_Ernandes

O microterminal suporta navegação de cursor porque num programa da própria empresa que eu tenho, é possível mudar a linha em que o cursor está, nó não muda a coluna…

Pode ser a segunda opção, eu tenho o wireshark aqui mas não sei usá-lo pra ver o que ta passando em uma porta específica…

Yago_Ernandes

eu consegui, entrei em contato com o suporte da empresa do terminal e eles me passaram um código em delphi, esse ai:

\u001B["+xlinha+";"+xcoluna+"H

Obrigado mesmo asssim…

Criado 6 de julho de 2012
Ultima resposta 11 de jul. de 2012
Respostas 16
Participantes 3