Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Problem splitting lines in a file

Reply
Thread Tools

Problem splitting lines in a file

 
 
Mothra
Guest
Posts: n/a
 
      01-12-2005
I'm trying to parse a log file using ';' as a newline and then wherever
I find items inside '(..)', indenting those lines thus:


foo;bar(foo;bar(foobar);foo)foobar

becomes

foo
bar(
foo
bar(
foobar
)
foo
)
foobar

What I've got so far is below - the problem is that when there are
nested sets of parentheses, I can't increase the indents accordingly.
Also, I can't work out how to get the closing ')' on a line by itself.

I'm in a bit of a pickle - can anyone help?

What I've got so far follows:


#!/usr/bin/perl -w
use strict;
$|=0;

my @in = <>;
my $tbchr = "\t";
my $tbcnt = 0;

for(@in){
my @ln=split(';', $_);
my $i;
for ($i=0; $i<@ln; $i++){
chomp($ln[$i]);
my @subln;
if ( $ln[$i] =~ /\([^)]/ ) {
@subln = split('\(',$ln[$i]);
my $k;for($k=0;$k<@subln;$k++){ $subln[$k] .=
'(' }
} elsif ( $ln[$i] =~ /[^(]\)/ ) {
@subln = split('\)',$ln[$i]);
my $k;for($k=0;$k<@subln;$k++){ $subln[$k] .=
')' }
} else {
@subln = $ln[$i];
}


for(@subln){
my $j;
for($j=0; $j<$tbcnt; $j++){ print $tbchr }
print "$_\n";
$tbcnt++ if /\(/;
$tbcnt-- if /\)/;
}

}
}
 
Reply With Quote
 
 
 
 
vkeyboard
Guest
Posts: n/a
 
      01-12-2005
I'd probably use a counter in a hash to keep track of the ()'s. One key
for the ) and one key for the (. To get the ) on a line by itself I'd do a
=~ s/)/\n)/

Can't remember if you'll need to escape that ) or not.

Mothra wrote:

> I'm trying to parse a log file using ';' as a newline and then wherever
> I find items inside '(..)', indenting those lines thus:



> foo;bar(foo;bar(foobar);foo)foobar


> becomes


> foo
> bar(
> foo
> bar(
> foobar
> )
> foo
> )
> foobar


> What I've got so far is below - the problem is that when there are
> nested sets of parentheses, I can't increase the indents accordingly.
> Also, I can't work out how to get the closing ')' on a line by itself.


> I'm in a bit of a pickle - can anyone help?


> What I've got so far follows:



> #!/usr/bin/perl -w
> use strict;
> $|=0;


> my @in = <>;
> my $tbchr = "t";
> my $tbcnt = 0;


> for(@in){
> my @ln=split(';', $_);
> my $i;
> for ($i=0; $i<@ln; $i++){
> chomp($ln[$i]);
> my @subln;
> if ( $ln[$i] =~ /([^)]/ ) {
> @subln = split('(',$ln[$i]);
> my $k;for($k=0;$k<@subln;$k++){ $subln[$k] .=
> '(' }
> } elsif ( $ln[$i] =~ /[^(])/ ) {
> @subln = split(')',$ln[$i]);
> my $k;for($k=0;$k<@subln;$k++){ $subln[$k] .=
> ')' }
> } else {
> @subln = $ln[$i];
> }



> for(@subln){
> my $j;
> for($j=0; $j<$tbcnt; $j++){ print $tbchr }
> print "$_n";
> $tbcnt++ if /(/;
> $tbcnt-- if /)/;
> }


> }
> }



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem splitting lines from file input Mothra Perl Misc 3 01-12-2005 04:31 PM
Re: how to read 10 lines from a 200 lines file and write to a new file?? Joe Wright C Programming 0 07-27-2003 08:50 PM
Re: Splitting up the definitions of a class into different files (splitting public from private)? John Dibling C++ 0 07-19-2003 04:41 PM
Re: Splitting up the definitions of a class into different files (splitting public from private)? Mark C++ 0 07-19-2003 04:24 PM
Re: Splitting up the definitions of a class into different files (splitting public from private)? John Ericson C++ 0 07-19-2003 04:03 PM



Advertisments