les fins de ligne Ruby en normalisant les
-
11-09-2019 - |
Question
J'ai une chaîne en Ruby, s
(par exemple) qui pourrait avoir l'une des fins de ligne standard (\n
, \r\n
, \r
). Je veux convertir tous ceux \n
s. Quelle est la meilleure façon?
Cela semble être un problème de super-commun, mais il n'y a pas beaucoup de documentation à ce sujet. De toute évidence, il existe des solutions brutes faciles, mais il n'y a rien construit pour gérer cette situation?
, des solutions élégantes idiomatiques-Ruby sont les meilleurs.
EDIT: rendu compte que ^M
et \r
sont les mêmes. Mais il y a encore trois cas. (Voir wikipedia .)
La solution
Best est juste pour gérer les deux cas que vous souhaitez modifier spécifiquement et ne pas essayer d'obtenir trop intelligent:
s.gsub /\r\n?/, "\n"
Autres conseils
Depuis Ruby 1.9, vous pouvez utiliser String::encode
avec universal_newline: true
pour obtenir toutes vos nouvelles lignes dans \n
tout en gardant l'encodage inchangé:
s.encode(s.encoding, universal_newline: true)
Une fois dans un état connu newline vous pouvez convertir librement revenir à CRLF en utilisant :crlf_newline
. par exemple: pour convertir un fichier inconnu (éventuellement mélangé) se terminant à CRLF
(par exemple), lu en mode binaire, puis:
s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
Je pense que la solution la plus propre serait d'utiliser une expression régulière:
s.gsub! /\r\n?/, "\n"
Essayez de les ouvrir sur NetBeans IDE - Son m'a demandé avant, sur l'un des projets que j'ai ouvert d'ailleurs, si je voulais fixer les fins de ligne. Je pense qu'il pourrait y avoir une option de menu pour le faire aussi, mais ce serait la première chose que je voudrais essayer.