Link to home
Start Free TrialLog in
Avatar of tomatocans
tomatocans

asked on

Position in String and YES/NO (Sorry will add points tomorrow)

Have input for $fields[11] like so:
                      ALT DEV/EXCURSION FROM ASSIGNED;ACFT EQUIPMENT PROBLEM/CRITICAL

                      Have the following loop reading input:


                      while(<IN>){

                            @anomalies=split(/;/,$fields[11]);
                      $position=0;
                      $i=1;
                      #LIST OF ANOMALIES
                      $1="NO";   #ACFT EQUIPMENT PROBLEM/CRITICAL
                      $2="NO";   #ACFT EQUIPMENT PROBLEM/LESS SEVERE
                      $3="NO";   #ALT DEV/EXCURSION FROM ASSIGNED
                      $4="NO";   #ALT DEV/OVERSHOOT ON CLB OR DES
                      for($i;$i< 4;$i++){
                      $number++;
                      if(@anomalies[i]="ACFT EQUIPMENT PROBLEM/CRITICAL"){
                      $1="YES";
                      @position[$number];
                      }
                      elsif(@anomalies[i]="ACFT EQUIPMENT PROBLEM/CRITICAL"){
                      $2="YES";
                      @position[$number];
                      }
                      elseif(@anomalies[i]="ACFT EQUIPMENT PROBLEM/LESS SEVERE"){
                      $3="YES";
                      @position[$number];
                      }
                      else(@anomalies[i]="ALT DEV/EXCURSION FROM ASSIGNED"){
                      $4="YES";
                      @position[$number];
                      }
                      }


                      print OUT "$1|$position[$number]|$2|$position[$number]|$3|$position[$number]|$4|$position[$number]";

                      }


                      The line of input in the example should print

                      YES|2|NO|0|YES|1|NO|0


Yes means the anomaly is present in the string and
the



                      How would u correct the code to properly produce the output.
Avatar of tomatocans
tomatocans

ASKER

Also there are 66,000 or so lines of input
for $field[11] and 30 anomalies so the position
of the aomalies can't be hardcoded.

I will ADD 200 points tomorrow
The following codes should satisties your new requirement. Do you have some sample data?

#!/usr/local/bin/perl

# just add all your anomalies (30?) here separated by ":"
$lst  = "ACFT EQUIPMENT PROBLEM/CRITICAL";
$lst .= ":ACFT EQUIPMENT PROBLEM/CRITICAL";
$lst .= ":ACFT EQUIPMENT PROBLEM/LESS SEVERE";
$lst .= ":ALT DEV/EXCURSION FROM ASSIGNED";

@a = split /:/, $lst;
$c[0] = "ALT DEV/EXCURSION FROM ASSIGNED;ACFT EQUIPMENT PROBLEM/CRITICAL";
$c[1] = "ALT DEV/EXCURSION FROM ASSIGNED;ACFT EQUIPMENT PROBLEM/CRITICAL";
$c[1] .= "; ;ALT DEV/OVERSHOOT ON CLB OR DES";
$c[3] = " ; ; ;ALT DEV/EXCURSION FROM ASSIGNED";
$rst = "";

@b = ();   # will contains counts
# $i - record the positions of anomalies
# while(<IN>){
for $j (0..$#c) {
    # @anomalies=split(/;/,$fields[11]);
    @anomalies=split(/;/,$c[$j]);
    for $i (0..$#anomalies) {    # check each field
        for $k (0..$#a) {        # against a list of anomalies
            if ("$anomalies[$i]" eq "$a[$k]") { ++$b[$i]; }
        }
    }
}
# }
for $i (0..$#b) {
    if ($b[$i] > 0) {
        if ($rst) { $rst .= "|YES|" . $b[$i];
        } else    { $rst  = "YES|" . $b[$i]; }
    } else {
        if ($rst) { $rst .= "|NO|0"; } else { $rst = "NO|0"; }
    }
}
# print OUT "$rst\n";
print "$rst\n";

# The line of input in the example should print
# NO|0|YES|2|NO|0|YES|1
I do not know what position you want: anomalies in the input line or anomalies in the list such as in @a?

If it is the position in anomaly list, just change the subscript in $b[] from $i to $k in the first for loop.

I have done a lot of similiar data processing. Post some data sample, I will get more sense what you are doing.

 
tomatocans,

i have a Q. can the string contain the same substring twice ??

Eg.
ALT DEV/EXCURSION FROM ASSIGNED;ACFT EQUIPMENT PROBLEM/CRITICAL;ALT
DEV/EXCURSION FROM ASSIGNED

if yes, what should the result be in this case since the sub-string ALT DEV/EXCURSION FROM
ASSIGNED appears at position 1 and 3!!

if the answer is no, i have a solution ready for you.
The answer is no it is not in the substring twice.
ASKER CERTIFIED SOLUTION
Avatar of maneshr
maneshr

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Adjusted points from 0 to 25
Thanks