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]