Pergunta

Eu tenho uma string em Ruby, s (digamos) que pode ter qualquer um dos finais de linha padrão (\n, \r\n, \r). Eu quero converter todos aqueles que \ns. Qual é a melhor maneira?

Este parece ser um problema super-comum, mas não há muita documentação sobre isso. Obviamente, existem soluções bruto fáceis, mas há algo construído para lidar com isso?

, soluções idiomáticas-rubi elegantes são as melhores.

EDIT: percebeu que ^M e \r são os mesmos. Mas ainda há três casos. (Veja wikipedia .)

Foi útil?

Solução

O melhor é apenas para lidar com os dois casos que você deseja alterar especificamente e não tentar obter demasiado inteligente:

s.gsub /\r\n?/, "\n"

Outras dicas

Desde o Ruby 1.9 você pode usar String::encode com universal_newline: true para obter todas as suas novas linhas em \n mantendo a sua codificação inalterada:

s.encode(s.encoding, universal_newline: true)

Uma vez em um estado de nova linha conhecida você pode livremente converter de volta para CRLF usando :crlf_newline. por exemplo: para converter um arquivo de (possivelmente misto) terminando a CRLF (por exemplo), lê-lo em modo binário, então:

s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)

Eu acho que a solução mais limpa seria usar uma expressão regular:

s.gsub! /\r\n?/, "\n"

Tente abrir-los no NetBeans IDE - Its me perguntado antes, em um dos projetos que eu abertos a partir de outros lugares, se eu queria corrigir as terminações de linha. Acho que pode ser uma opção de menu para fazê-lo também, mas que seria a primeira coisa que eu tentaria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top