On 11 Aug 2006 at 9:28, Tom Phoenix wrote:
> On 8/11/06, Beginner <[EMAIL PROTECTED]> wrote:
>
> > But once I have found my tag I would like to use sysseek and sysread
> > to slurp up some data. Is there some way I can find out where my
> > position in the file is once $_ has matched?
>
> You probably want seek() and read(), instead of sysseek() and
> sysread(). (The "sys" variants are very low-level.) Then you would
> want tell() to identify the position in the file. You may need to
> subtract a few bytes if you need to locate the position of a string
> that has already been read. It's not the way most Perl programmers
> would solve the problem, but it may work for you. Good luck with it!
>
Thanx Tom,
I had just found tell (honest) in the opentut. You are of course
tight I have to step back a couple of bytes to get to the beginning
of the string I want but WHOOPIE it works.
I can quickly retrieve all the XML/XMP from an image file (similar
to, but no where near as well as, the excellent JPEG::MetaData
module). $d is now XML and ready for parsing.
I would be interested to know who I can improve this, or what a real
programmer would do differently. Any tips are much appreciated.
Thanx.
Dp.
================ What I have so far =========
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $file = 'test2.tif';
my ($d, $start,$end);
open(FH, $file) or die "Can't open $file: $!\n";
binmode(FH);
while ( <FH> ) {
if ($_ =~ "<x:xapmeta xmlns:x='adobe:ns:meta/") {
$start = tell FH;
}
if ($_ =~ "</x:xapmeta>") {
$end = tell FH;
last;
}
}
$start -= 84; # Length of string above.
my $amount = ($end - $start);
print "Start=$start, END=$end, $amount\n";
seek(FH,$start,0);
read(FH,$d, $amount);
close(FH);
print Dumper($d);
================
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>