in reply to RAM, "
in thread Make a perl script by taking specific lines from a txt file

I wrote this code :
#!/usr/bin/perl use strict; use warnings; for(my $i=351; $i<400; $i++){ my $filename = '/home/nikol123/indri-5.6/runquery/trec7_4collections.t +xt'; open(my $file, '<', $filename) or die "open: $!"; while ( <$file> ) { my @lines = split(/\n/, $filename); foreach my $line (@lines) { if ($line = '<query> <type>indri</type> <number>$i</number> <text>"_" +</text> </query>') { my $param = "<parameters> <index>/home/nikol123/indri-5.6/4collections</index> print $line; <fbDocs>10</fbDocs> </parameters>"; print $param; }}}}
but it's not functional as i get this
<parameters> <index>/home/nikol123/indri-5.6/4collections</index> print <query> <type>indri</type> <number>$i</number> <text>"_"</text> +</query>; <fbDocs>10</fbDocs> </parameters>
but i want due to for loop to read and write the line that contain the variable i from the my txt file ,in order to have the according text field, for example for i=351 to have
<parameters> <index>/home/nikol123/indri-5.6/4collections</index> <query> <type>indri</type> <number>351</number> <text>Falkland petrole +um exploration</text> </query>; <fbDocs>10</fbDocs> </parameters>

Replies are listed 'Best First'.
Re^2: RAM, "
by poj (Abbot) on Nov 23, 2014 at 18:54 UTC
    Consider using an XML parser. eg XML:Twig.
    #!perl use strict; use warnings; use XML::Twig; my $filename = 'trec7_4collections.txt'; our $num; my $fh; for $num (351..354){ open $fh,'>',$num.'.xml' or die "$!"; my $twig = XML::Twig->new( twig_handlers => { query => \&query }, pretty_print=>'indented' ); $twig->parsefile($filename); $twig->flush($fh); print "Created $num.xml\n"; } sub query { my( $twig, $e) = @_; my $n = $e->first_child_text('number'); $e->cut if ($n ne $num); }
    poj