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: 8029
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, 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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2820
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 8029
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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