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]