75 votes

Comment supprimer les retours de chariot avec Ruby?

Je pensais que ce code va fonctionner, mais l'expression régulière n'est pas toujours correspondre à la \r\n. J'ai vu les données que je lis dans un éditeur hexadécimal et vérifié il y a vraiment un hex D hexagonale et d'Un motif dans le fichier.

J'ai aussi essayé les expressions régulières /\xD\xA/m et /\x0D\x0A/m, mais ils ne correspondent pas.

C'est mon code maintenant:

   lines2 = lines.gsub( /\r\n/m, "\n" )
   if ( lines == lines2 )
       print "still the same\n"
   else
       print "made the change\n"
   end

En plus de solutions de rechange, il serait bon de savoir ce que je fais mal (pour favoriser l'apprentissage de ma part). :)

171voto

Ian Vaughan Points 3510

Utilisez String # strip

Renvoie une copie de str avec les espaces blancs de début et de fin supprimés.

par exemple

 "    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"
 

Utiliser gsub

 string = string.gsub(/\r/," ")
string = string.gsub(/\n/," ")
 

36voto

localshred Points 1443

En général, quand je traite avec le strip-tease ou \ n, je vais chercher les deux en faisant quelque chose comme:

 lines.gsub(/\r\n?/, "\n");
 

J'ai constaté qu'en fonction de la manière dont les données ont été sauvegardées (le système d'exploitation utilisé, l'éditeur utilisé, la relation de Jupiter avec Io à l'époque), il peut y avoir ou non une nouvelle ligne après le retour à la ligne. Il semble étrange que vous voyiez les deux personnages en mode hexadécimal. J'espère que cela t'aides.

23voto

Romulo Ceccon Points 5402

Qu'obtenez-vous quand vous n' puts lines? Qui vous donnera une idée.

Par défaut File.open ouvre le fichier en mode texte, de sorte que votre \r\n caractères seront automatiquement converties en \n. C'est peut-être la raison en lines sont toujours égal à lines2. Pour éviter Ruby à partir de l'analyse de la ligne se termine utiliser l' rb mode:

C:\> copier con lala.txt
un
fichier
avec
de nombreux
lignes
^Z

C:\> cisr
l'irb(main):001:0> texte = Fichier.open('lala.txt').lire
= > "\nfile\avec\nmany\nlines\n"
l'irb(main):002:0> bin = Fichier.open('lala.txt', 'rb').lire
=> "un\r\nfile\r\avec\r\nmany\r\nlines\r\n"
l'irb(main):003:0>

Mais à partir de votre question et le code je vois vous devez simplement ouvrir le fichier avec la modification par défaut. Vous n'avez pas besoin de conversion et vous pouvez utiliser les courts File.read.

17voto

Vik Points 2959
modified_string = string.gsub(/\s+/, ' ').strip

15voto

Cameron Price Points 869
lines2 = lines.split.join("\n")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X