Hi Joseph

Just a thought:

    if ( !$_ or $_ eq "" ) {next;}

is a C idiom, where a string is represented as a char* which may be NULL or
may point to a zero-length string. In Perl a simple

    if ( !$_ ) {next;}

or, better

    next unless $_;

Cheers,

Rob

"R. Joseph Newton" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> Hi Mike,
>
> Try something like the following.  It actually takes an extra step, by
making a hash opf all lines, then searching it for the keys that have the
desired numerical prefix.  There is a purpose to that.  A few small edits
will allow this to report all of the strings, grouped by prefix.
>
> #!/usr/bin/perl -w
>
> my ($SourceFile, $SoughtPrefix) = @ARGV;
>
> open (SOURCE, $SourceFile);
>
> my $i = 0;
> while (<SOURCE>) {
>   chomp;
>   if(!$_ or $_ eq "") {next;}
>   ($value, $name) = split(/ +/, $_, 2);   # Didn't have the 2 at
first--"blue whale" became "blue"
>   $contents{$name} = $value;
>   $groups{$value} = $value;
> }
>
> if ($SoughtPrefix and $SoughtPrefix ne "") {
>   SeekPrefix();
> } else {
>   foreach $group(sort keys(%groups)) {
>     $SoughtPrefix = $group;
>     print "PREFIX: $SoughtPrefix\n";
>     SeekPrefix();
>     print "**************************\n";
>   }
> }
>
> sub SeekPrefix {
>   my $i = 0;
>   my @FoundStrings;
>   foreach $key (keys(%contents)) {
>     if ($contents{$key} =~ /$SoughtPrefix/) {
>       $FoundStrings[$i++] = $key;
>       print "$key\n";
>     }
>   }
>   my $MatchCount = $i;
>   print "Ther were $MatchCount strings that matched\n";
> }
>
> Output:
>
> E:\d_drive\perlStuff\guests>GroupTest.pl values.txt 012
> "blue whale"
> "lion"
> Ther were 2 strings that matched
>
> E:\d_drive\perlStuff\guests>GroupTest.pl values.txt
> PREFIX: 010
> "blue"
> "red"
> Ther were 2 strings that matched
> **************************
> PREFIX: 011
> "diamond"
> "emerald"
> Ther were 2 strings that matched
> **************************
> PREFIX: 012
> "blue whale"
> "lion"
> Ther were 2 strings that matched
> **************************
>
>
> Mike Burnard wrote:
>
> > Hi,
> >
> > I'm in the midst of writing my first useful perl script.  It's designed
to
> > pull text out of a plain text file and write a xml plist.
> >
> > The only trouble I'm having (so far) is getting the text out the way I
want
> > it.
> >
> > The file I'm pulling data out of is formatted like this:
> >
> > 010 "red"
> >
> > 011 "diamond"
> >
> > 012 "lion"
> >
> > 010 "blue"
> >
> > 012 "blue whale"
> >
> > 011 "emerald"
> >
> > So, I've got this to get specific groups out at once:
> >
> > while (<OLDHL>) {
> >     if(/^010/) {
> >  -- part I need help with --
> > }
> > }
> >
> > I just need to know what to put to get only the part within quotes out
of
> > each line.  I'm going to put them into either an array, but I can figure
> > that part out, its just getting only part of the line I'm having trouble
> > with.
> >
> > I think I'll have no problem writing the xml file with printf, other
than
> > this small problem I'm having fun.  I was proud of myself when I got all
of
> > the 010's to print to the screen at least!.
> >
> > Thanks for your help.
> >
> > -mike
> >
> > --
> > 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]

Reply via email to