On Tuesday 01 April 2003 20:47, you wrote:

Alright...well first of all I hope this is just pseudocode.  Because a lot of 
it won't work at all.

Follow along...

| All,
|
|
|
| What I need is that if I was parsing some data and there is no value
| (spaces) it should print ***** so that the next thing I will print after
| it would not be printed out immediately.
|
|
|
| Ex. of output I want
|
|
|
| VISUALID          XXXX
|
| 123456              1023
|
| 123457              1354
|
| ****                   1789
|
| This is what happens if no value is found
|
| VISUALID          XXXX
|
| 1789
|
|
|
| SCRIPT as follows:
|
| while ($_=<SUMM>) {   ##file is open###

This statement is redundant.  Saying:

while ( <SUMM> ) 

is sufficient.  Each line in <SUMM> will automatically be assigned to $_ as 
long as $/ isn't changed.

|
| {
|
|     if (/_visualid_(.*)/) {

This regular expression won't work with the data you provided.

|
|                 {
|
|                 if ($length < 2);                         {   ##what im
| doing is that if the string length is less than 2 print ***)

You're not assigning $length anywhere.  Now, $length is interesting because 
is seems like what you really want is not to count bytes but you want to 
count how many words there are on a line.  This could be accomplished with a 
regular expression such as:

$numwords = (() = $line =~ /(.*?) /g) + 1;

You could also use substr().

<example>
perl -e '
$line = "this is a line of words that has hmmm\n";
chomp($line);
$numwords = (() = $line =~ /(.*?) /g) + 1; # count starts at 0
print "$line == $numwords words\n";
'
this is a line of words that has hmmm == 9 words
</example>


|
|                 print "***\t";
|
|                 }
|
|                else {
|
|                 print "$1\t";}
|

Again, I am assuming this is pseudocode but for completeness sake $1 isn't 
assigned.  I guess $1 would be the return from the regex you used above.

|             }}
|
|
|
|     if (/_xxxx_(.*)/) {

Im not exactly sure why you keep using '_'s in your regexes.

|
|             print "\t$1_";
|
|     }
|
|
|
|
|
| thanks,
|
| Nix


Here is some code that I would have written to do what you are asking for...

[EMAIL PROTECTED] ~]$ cat pb;perl pb
open(F,"h") or die();

for ( <F> )
{
    chomp();
    $numwords = (() = $_ =~ /(.*?)\s+/g) + 1;

    if ( /visualid/i )
    {
        print "$_\t    XXXX\n";
        next;
    }

    if ( $numwords < 2 )
    {
        print "****\t\t    $_\n";
    } 
    else
    {
        print $_,"\n";
    }
}
VISUALID            XXXX
123456              1023
123457              1354
****                1789

-- 

- Jim

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to