Remover quebra de linha

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Remover quebra de linha

Mensagem por Itamar M. Lins Jr. »

Olá!
Estou tentando remover um caractere que é interpretado como CHR LF + CR
Usando alltrim(descricao) não adianta.

Tem outro comando para pegar só o que tem escrito e visível ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Remover quebra de linha

Mensagem por JoséQuintas »

Talvez o Reg_Ex*, ou o StrTran() pra trocar caracteres.
Já vi lugares que trocam o Chr(13) + Chr(10) por Chr(10) + Chr(13), não sei porque.
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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover quebra de linha

Mensagem por Jairo Maia »

Mas qual caractere é esse LF? Quebra de linha em Windows é composto por 2 caracteres, a saber Chr( 13 ) + Chr( 10 ), onde Chr( 13 ) é nominado CR e Chr( 10 ) nomindado LF.

Textos salvos pelo MemoEdit(), as linhas são terminadas por Soft carriage, qie é composto pelos caracteres Chr( 141 ) + Chr( 10 ). Para transformar Soft Carriage em Hard Carriage ( Chr( 13 ) + Chr( 10 ) ) tem a função HardCR( cString ), não sei se esse é o caso.

Se esse for o caso, basta então fazer:

Código: Selecionar todos

cVar := StrTran( HardCR(  AllTrim( descricao ) ), Hb_EOL() ) 
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)
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Remover quebra de linha

Mensagem por marcosgambeta »

Olá Itamar,

Visto que Windows usa CR + LF e Unix apenas LF, eu costumo resolver assim:

Código: Selecionar todos

cTexto := StrTran( cTexto, chr( 13 ) , "" ) // elimina CR (carriage return)
cTexto := StrTran( cTexto, chr( 10 ) , "" ) // elimina LF (line feed)
Qualquer quebra de linha é removida, seja CR+LF, LF+CR ou apenas LF.
Atenciosamente,
Marcos Antonio Gambeta
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Remover quebra de linha

Mensagem por Itamar M. Lins Jr. »

Olá!
Acredito que vem da internet. Copiar e colar nome, etc do sintegra ou de alguma página em HTML.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Remover quebra de linha

Mensagem por marcosgambeta »

Itamar,

Outra opção seria limpar da string tudo que for < 32. Veja o exemplo abaixo:

Código: Selecionar todos

PROCEDURE Main()

   LOCAL cText

   cText := "teste1 " + chr( 10 ) + " teste2" + chr( 9 ) + "teste3 " + chr( 25 ) + chr( 13 ) + chr( 10 )

   ? len( cText )
   ? cText

   cText := ClearString( cText )

   ? len( cText )
   ? cText

RETURN

FUNCTION ClearString( cString )

   LOCAL cNewString
   LOCAL n

   cNewString := ""

   FOR n := 1 TO len( cString )

      IF asc( substr( cString, n, 1 ) ) == 9 // TAB
         cNewString += chr( 32 )
      ELSEIF asc( substr( cString, n, 1 ) ) >= 32
         cNewString += substr( cString, n, 1 )
      ENDIF

   NEXT n

RETURN cNewString
Neste caso, você tem a opção de decidir o que fazer com cada código de controle (faixa 00-31).
Atenciosamente,
Marcos Antonio Gambeta
Responder