You don't need to read the whole file in, but could try somehting like this:
Script starts next line:
#!perl -w
my $counter = 1;
my %headinghash;
while (<DATA>) {
chomp;
if ( /^(\d+)\.\s+(.*)/ ) {
$counter = $1;
$Headinghash{$counter} = $2 . "\n";
}elsif ( ! /${counter}\./ ) {
$Headinghash{$counter} .= $_ . "\n";
}else {
$counter = '';
}
=head1
if ($file =~ /^($counter)\.\s(.*?)$/) {
$headinghash{$counter} = $2;
#missing code here, need data up to next occurrence of "$counter.1"
$counter++;
}
=cut
}
foreach my $MyKey (sort {$a <=> $b} keys %Headinghash) {
printf "%2d:\n%-s", $MyKey, $Headinghash{$MyKey};
}
__DATA__
1. This is a heading
........
1.1. A subheading
1.2. Another subheading
2. Another heading
.......
3. Yet another heading
......
^----- script ends here
Output:
1:
This is a heading
........
2:
Another heading
.......
3:
Yet another heading
......
-----Original Message-----
From: birgit kellner [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, November 13, 2001 12:56
To: [EMAIL PROTECTED]
Subject: regexp
I have a file structured like this:
1. This is a heading
........
1.1. A subheading
1.2. Another subheading
2. Another heading
.......
3. Yet another heading
......
I want to extract (a) each heading number with the matching heading text,
and (b) the immediately following text up to, and not including, the first
subheading.
I got the first part, but not the second:
my $counter = 1;
my %headinghash;
open (FILE, "<test.txt") || die ("can't: $!");
while (<FILE>) {
my $file = $_;
chomp($file);
if ($file =~ /^($counter)\.\s(.*?)$/) {
$headinghash{$counter} = $2;
#missing code here, need data up to next occurrence of "$counter.1"
$counter++;
}
}
close (FILE);
I need the regexp to take off at that point where there was a match for the
heading, and then extract everything from there up to the occurrence of
"$counter.1". Would this necessarily involve slurping the whole file into
an array first?
Thanks in advance for any advice,
Birgit Kellner
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]