in reply to Re^2: peek at STDIN, to determine data type and then pass STDIN to a parser
in thread peek at STDIN, to determine data type and then pass STDIN to a parser
Yes. It is an option. It may not be the best option for your uses.
I use iterators when schlepping event logs through my monitoring system, whether they come from a real-time event queue, stored log files, or current state of a system. To my consumer software, all of the data looks the same.
The reason I suggested this technique is that it does not significantly increase the memory or filesystem requirements (as reading files fully into memory or storing in a temp file and processing would^Wcould do). It also allows the consumer (your XML processing in this case) to treat it as just a file handle.
# UNTESTED # # This is for line-by-line reading, not block-by-block reading. # Adjust as necessary. sub create_iterator { my $original_fh = \*STDIN; my @cached_data = $original_fh->getline; # enough +to id the file my $data_type_id = identify_data_type( \@cached_data ); # Remove +from @cached if provided my $iterator = iter( sub { my $retval; if ( $data_type_id ) { $retval = $data_type_id; $data_type_id = undef; } elsif ( @cached_data ) { $retval = shift( @cached_data ); } else { $retval = $original_fh->getline; } return $retval; } ); return $iterator; }
--MidLifeXis
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: peek at STDIN, to determine data type and then pass STDIN to a parser
by aral (Acolyte) on Jan 08, 2015 at 08:57 UTC | |
|
Re^4: peek at STDIN, to determine data type and then pass STDIN to a parser
by aral (Acolyte) on Jan 08, 2015 at 10:12 UTC | |
by MidLifeXis (Monsignor) on Jan 09, 2015 at 17:48 UTC | |
by aral (Acolyte) on Jan 12, 2015 at 13:54 UTC | |
by aral (Acolyte) on Feb 17, 2015 at 11:44 UTC |