J'essayais d'utiliser le code suivant pour lire les lignes d'un fichier. Mais lors de la lecture d'un fichier , le contenu est tout sur une seule ligne:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Mais ce fichier imprime chaque ligne séparément.
Je dois utiliser stdin, comme ruby my_prog.rb < file.txt
, où je ne peux pas supposer quel est le caractère de fin de ligne que le fichier utilise. Comment puis-je le gérer?
ruby
line-endings
dessiner
la source
la source
line_num = 0
, vous pouvez utilisereach.each_with_index
ou éventuellementeach.with_index
.read
.line.chomp
pour gérer les fins de ligne (gracieuseté de @SreenivasanAC )Réponses:
Je crois que ma réponse couvre vos nouvelles préoccupations concernant la gestion de tout type de fins de ligne depuis les deux
"\r\n"
et"\r"
sont converties au standard Linux"\n"
avant d'analyser les lignes.Pour prendre en charge le
"\r"
caractère EOL avec le standard"\n"
et"\r\n"
depuis Windows, voici ce que je ferais:Bien sûr, cela pourrait être une mauvaise idée sur les très gros fichiers car cela signifie charger le fichier entier en mémoire.
la source
/\r?\n/
couvrir à la fois \ r \ n et \ n sans combiner les lignes vides comme le ferait le commentaire de PodRuby a une méthode pour cela:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
la source
with_index
avec cela?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Cela exécutera le bloc donné pour chaque ligne du fichier sans mettre le fichier entier en mémoire. Voir: IO :: foreach .
la source
Votre premier fichier a des fins de ligne Mac Classic (c'est au
"\r"
lieu de l'habituel"\n"
). Ouvrez-le avecpour spécifier les fins de ligne.
la source
C'est à cause des extrémités de chaque ligne. Utilisez la méthode chomp dans ruby pour supprimer la ligne de fin '\ n' ou 'r' à la fin.
la source
Je suis partisan de l'approche suivante pour les fichiers qui ont des en-têtes:
Cela vous permet de traiter une ou plusieurs lignes d'en-tête différemment des lignes de contenu.
la source
que diriez-vous obtient ?
la source
N'oubliez pas que si vous êtes préoccupé par la lecture d'un fichier qui pourrait avoir d'énormes lignes qui pourraient submerger votre RAM pendant l'exécution, vous pouvez toujours lire le fichier morceau par repas. Voir " Pourquoi slurper un fichier est mauvais ".
la source