Comment puis-je lire des lignes à partir de la fin du fichier en Perl?
Je suis en train de travailler sur un script Perl pour lire fichier CSV et de faire quelques calculs.
Fichier CSV n'a que deux colonnes, quelque chose comme ci-dessous.
One Two
1.00 44.000
3.00 55.000
Maintenant ce fichier CSV est très grand ,peut être de 10 MO à 2 go.
Actuellement, je suis prise de fichier CSV de la taille de 700 MO. J'ai essayé d'ouvrir ce fichier dans le bloc-notes, excel, mais il ne ressemble à aucun logiciel va ouvrir.
Je veux lire peut-être 1000 dernières lignes du fichier CSV et voir les valeurs.
Comment puis-je le faire? Je ne peux pas ouvrir le fichier dans le bloc-notes ou n'importe quel autre programme.
Si j'écris un script Perl puis j'ai besoin de traiter fichier complet pour aller à la fin du fichier, puis de lire ces derniers 1000 lignes.
Est-il une meilleure façon de qui? Je suis nouveau sur Perl et toutes les suggestions seront appréciées.
J'ai cherché sur net et il y a quelques scripts disponible comme Fichier::Queue, mais je ne sais pas qu'ils vont travailler sur windows ?
Vous devez vous connecter pour publier un commentaire.
Sous *nix, vous pouvez utiliser la queue de la commande.
Qui vont écrire seulement le dernier 1000 lignes pour le programme perl.
Sur Windows, il y a gnuwin32 et unxutils les paquets ont
tail
utilitaire.La Fichier::ReadBackwards module vous permet de lire un fichier dans l'ordre inverse. Cela rend plus facile pour obtenir les N dernières lignes aussi longtemps que vous n'êtes pas dépendant. Si vous et le besoin de données est assez petit (qui devrait être dans votre cas), vous avez pu lire le dernier 1000 lignes dans un tableau et ensuite
reverse
il.Ce n'est que tangentiellement liés à votre question principale, mais lorsque vous voulez vérifier si un module comme Fichier::Queue fonctionne sur votre plate-forme, de vérifier les résultats de CPAN Testeurs. Les liens en haut de la page du module dans CPAN Recherche vous conduire à
En regardant la matrice permet de voir qu'en effet, ce module a un problème sur Windows sur toutes les versions de Perl testé:
J'ai écrit rapide vers l'arrière de recherche de fichier en utilisant le code suivant sur pur Perl:
et exécuter ce script comme:
Sans queue, Perl seule solution n'est pas déraisonnable.
Une façon est de chercher à partir de la fin du fichier, puis lire des lignes. Si vous n'avez pas assez de lignes, de chercher encore plus loin de la fin et essayer de nouveau.
P. S. Un meilleur titre serait quelque chose comme "la Lecture des lignes de la fin d'un grand fichier en Perl".
Bien que vraiment, le fait que les systèmes UNIX pouvez simplement
tail -n 1000
devrait vous convaincre de n'installer que cygwin ou les commandes colinuxVous pouvez utiliser Tie::File module je crois. Il ressemble à ceci charge les lignes dans un tableau, alors vous pouvez obtenir la taille de la matrice et de traiter les tableaux-ze-1000 jusqu'à arraySize-1.
Tie::File
Une autre Option serait de compter le nombre de lignes dans le fichier, ensuite une boucle sur le fichier une fois, et commencer la lecture dans les valeurs à numberofLines-1000
Qui vous donnent le nombre de lignes (sur la plupart des systèmes.
Si vous connaissez le nombre de lignes dans le fichier, vous pouvez le faire
où N est $num_lines_in_file - $num_lines_to_print.
Vous pouvez compter les lignes avec
Les modules sont la voie à suivre. Cependant, parfois, vous peut être d'écrire un morceau de code que vous voulez exécuter sur une variété de machines qui peuvent être à côté de la plus obscure des modules de CPAN. Dans ce cas, pourquoi ne pas simplement la "queue" et de vidage de la sortie vers un fichier temporaire de l'intérieur Perl?
Vous avez alors quelque chose qui ne dépend pas d'un module CPAN si l'installation on peut présenter un problème.
Sans compter sur la queue, qui je n'aurais probablement faire, si vous avez plus de $TAILLE [2 GO?] de mémoire, je dirais tout simplement être paresseux et ne:
Si les autres réponses concernant
queue
ou
seek()
sont assez bien le chemin à parcourir sur ce.Vous devez absolument utiliser le Fichier::Queue, ou mieux encore un autre module. Ce n'est pas un script, c'est un module (bibliothèque de programmation). Il est probable fonctionne sur Windows. Comme quelqu'un l'a dit, vous pouvez le vérifier sur CPAN Testeurs, ou souvent simplement en lisant la documentation du module ou tout simplement de l'essayer.
Vous avez sélectionné l'utilisation de la queue de l'utilitaire de votre choix de réponse, mais c'est probablement à être plus de maux de tête sur Windows Fichier::Queue.