perl - lecture d'un fichier par blocks en partant de la fin - Perl - Programmation
Marsh Posté le 11-02-2006 à 19:49:23
perldoc -f binmode
(bien que ça soit noté dans la doc sysread)
Marsh Posté le 11-02-2006 à 20:11:43
okay, si j'ai bien compris le man, ca devrait pouvoir se faire :-)
merci ;-)
Marsh Posté le 12-02-2006 à 18:16:13
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
Marsh Posté le 12-02-2006 à 20:05:32
détaille, regarde bien le retour de sysread, n'oublie pas le binmode, etc
Marsh Posté le 12-02-2006 à 20:07:07
et sans doute mieux avec read. je sais pas pourquoi j'ai embrayé direct sur sysread ...
Marsh Posté le 12-02-2006 à 20:13:34
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
Marsh Posté le 11-02-2006 à 19:15:49
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