Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1459 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  perl - lecture d'un fichier par blocks en partant de la fin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

perl - lecture d'un fichier par blocks en partant de la fin

n°1303544
gorila
It's not a bug, it's a feature
Posté le 11-02-2006 à 19:15:49  profilanswer
 

Petite question avancee en ouverture et lecture de fichiers.
 
je dois ouvrir des fichiers faisant plusieurs go chacuns, tous composes de structures de 512 que j'unpackerait par la suite.
 
quelle maniere existe t il  pour lire un fichier comme ca.
 
en gros:
 
- ouvrir le fichier.
- se positionner a la fin - 512;
- lire la structure;
- lire la structure de 512 a 1024 au dessus;
et recommencer ainsi de suite....
 
merci d'avance pour votre aide

mood
Publicité
Posté le 11-02-2006 à 19:15:49  profilanswer
 

n°1303553
Taz
bisounours-codeur
Posté le 11-02-2006 à 19:48:35  profilanswer
 

perldoc -f sysread

n°1303554
Taz
bisounours-codeur
Posté le 11-02-2006 à 19:49:23  profilanswer
 

perldoc -f binmode
 
(bien que ça soit noté dans la doc sysread)

n°1303564
gorila
It's not a bug, it's a feature
Posté le 11-02-2006 à 20:11:43  profilanswer
 

okay, si j'ai bien compris le man, ca devrait pouvoir se faire :-)
 
merci ;-)

n°1303581
Taz
bisounours-codeur
Posté le 11-02-2006 à 20:48:39  profilanswer
 

et après pack/unpack

n°1303809
gorila
It's not a bug, it's a feature
Posté le 12-02-2006 à 18:16:13  profilanswer
 

bon alors, je viens avec une nouvelle question:
 
on veut lire 512 par 512 en partant de la fin, normallement le premier while en commentaire devrait le faire, mais il n'affiche rien dans le printf, alors qu'un bon vieux read des familles marche.....
 
no comprendo
 
my $nb_reads = 1;
##while (sysread(FILE, $struct, $struct_size, $size - ($nb_reads * $struct_size)) != 0) {
##while (read(FILE, $struct, $struct_size) != 0) {
    my ($ut_name, $ut_id, $ut_line, $ut_host, $ut_session, $ut_type, $ut_pid,
 $e_termination, $e_exit, $ss_len, $sa_family, $ss_pad, $tv_sec, $tv_usec, $ut_pad) =
     unpack($unpack_tpl, $struct);
     
    print("name = $ut_name\n" );
    $nb_reads++;
}
 
 
merci d'avance

n°1303869
Taz
bisounours-codeur
Posté le 12-02-2006 à 20:05:32  profilanswer
 

détaille, regarde bien le retour de sysread, n'oublie pas le binmode, etc

n°1303870
Taz
bisounours-codeur
Posté le 12-02-2006 à 20:06:26  profilanswer
 

mais c'est tout aussi valide avec read en fait

n°1303871
Taz
bisounours-codeur
Posté le 12-02-2006 à 20:07:07  profilanswer
 

et sans doute mieux avec read. je sais pas pourquoi j'ai embrayé direct sur sysread ...

n°1303874
gorila
It's not a bug, it's a feature
Posté le 12-02-2006 à 20:13:34  profilanswer
 

en fait je viens de comprendre que le offset de sysread ne sert pas du tout a l'utilisation que je voulais en faire....
 
en relisant plusieurs fois le man et dans differentes versions, j'ai compris que l'offset servait en fait a sysread pour stocker ce qu'il a lu a un offset dans la variable...
 
un sysread(FILE, $var, 10, 512); stockera les 10 characteres lus a partir du charactere 512 dans $var, en rajoutant des \0 dans la chaine pour completer....
 
 
donc en fait je suis passe avec un seek.... et ca marche :-)
 
merci pour ton aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  perl - lecture d'un fichier par blocks en partant de la fin

 

Sujets relatifs
perl - formatListage de fichier ls -l avec Java
Mise a jour de fichier sur FTP[VBScript] [RESOLU] erreur lors de la suppression de fichier
modification fichier txtVBA Excel 2002 - AS400 chercher un fichier
Probleme bisard de fichier batch au démarrage[java] Parser un fichier XML
Lire un fichier xmlCréer un affichage style graph a partir de fichier ?
Plus de sujets relatifs à : perl - lecture d'un fichier par blocks en partant de la fin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR