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 \ns. 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 .)

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top