Comment lire la ligne précave d'un fichier. Le contraire de IO.gets.I initialement pensé à mettre IO.lineno au numéro de ligne que je voulais lire, mais cela ne fonctionne pas comme attendre. Comment lisez-vous réellement la ligne précédente?Lecture de la ligne précédente du fichier avec Ruby
Répondre
Il y a plusieurs façons, cela dépend de la quantité d'informations dont vous disposez. Si vous connaissez la longueur de la dernière ligne que vous lisez en vous pouvez prendre l'approche la plus simple qui serait
# assume f is the File object
len = last_line_length
f.seek -len, IO::SEEK_CUR
Bien sûr, si vous n'êtes pas à condition que les choses d'information deviennent un peu moins agréable. Vous pouvez utiliser la même approche que ci-dessus pour revenir en arrière (un octet à la fois) jusqu'à ce que vous atteigniez un marqueur de nouvelle ligne ou que vous preniez lineno
et que vous lisiez depuis le début. Quelque chose comme
lines = f.lineno
f.rewind
(lines - 1).times { f.gets }
Cependant, pour autant que je sache, il n'y a pas de mécanisme direct à juste go back 1 N
où N
représente une ligne. En outre, vous devez savoir que si vous pouvez écrire à File.lineno
, cela n'affecte pas réellement la position dans le fichier et il ruine également la précision de la variable pour les lectures après ce point.
Une façon simple est de se rappeler la ligne précédente vous lisez:
prev = nil
File.foreach('_vimrc') do |line|
p [line, prev] # do whatever processing here
prev = line
end
a vu une excellente suggestion sur comp.lang.ruby - utiliser IO.tell de garder une trace de la position de chaque ligne dans le fichier afin que vous puissiez chercher directement à lui:
File.open "foo" do |io|
idx = [io.tell]
while l = io.gets
p l
idx << io.tell
end
end
le joyau Elif a une méthode qui obtient est à l'opposé de IO.gets.
$ sudo gem install Elif
$ irb
require "elif"
last_syslog = Elif.open('/var/log/syslog') { |file| file.gets }
- 1. Lecture de la ligne de fichier précédente avec Ruby
- 2. Lecture d'un fichier avec Ruby
- 3. Comment supprimer la dernière ligne du fichier dans Ruby?
- 4. Résultat de la ligne précédente (programmation C)
- 5. Lecture continue de STDOUT du processus externe dans Ruby
- 6. Lecture GZIPInputStream ligne par ligne
- 7. lecture sur la ligne selfs 0x1A
- 8. Lecture des fichiers à partir du fichier avec C
- 9. Récupère la ligne précédente et la ligne suivante de l'ID actuel
- 10. Une expression régulière pour récupérer la ligne précédente dans un fichier journal
- 11. UnicodeDecodeError lors de la lecture des mots du dictionnaire fichier avec un script Python simple,
- 12. numéro de ligne de lecture fonctions PHP DOM à partir du fichier d'entrée
- 13. Changement du nom et de l'emplacement du fichier avec la ligne de commande
- 14. lecture du fichier image FAT12 en C
- 15. lecture du fichier dans un tableau
- 16. sql tirant une ligne pour la ligne suivante ou précédente d'une ligne en cours
- 17. Vérification de la version du fichier dans Ruby sous Windows
- 18. Lecture à partir du fichier en eclipse
- 19. linq to xml - lecture du fichier hibernate
- 20. Java, lecture d'un fichier du répertoire courant?
- 21. Sélection du fichier de ressources avec GetGlobalResourceObject, lecture contre la culture actuelle
- 22. Inclure les fichiers dans une ligne de commande avec Ruby
- 23. La lecture de TCPSocket est lente dans Ruby/Rails
- 24. Aide à la lecture des sauts de ligne dans un fichier texte
- 25. Java: lecture de la nouvelle ligne à partir d'un fichier texte
- 26. Problème avec ArrayLists et lecture d'un fichier
- 27. Lecture de parties d'une ligne (getline())
- 28. Comparaison d'une valeur avec la ligne précédente dans une boucle while?
- 29. Comment exécuter mes spécifications avec la version précédente de Rspec?
- 30. Taille de lecture du tampon de fichier optimale?
Je vois cette question aussi sur comp.lang.ruby - si vous obtenez une bonne réponse là-bas, s'il vous plaît être un bon citoyen et mettre à jour cette page aussi. –