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