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(/;/,$fiel ds[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|$positio n[$number] |$4|$posit ion[$numbe r]";
}
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.
ALT DEV/EXCURSION FROM ASSIGNED;ACFT EQUIPMENT PROBLEM/CRITICAL
Have the following loop reading input:
while(<IN>){
@anomalies=split(/;/,$fiel
$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
$3="YES";
@position[$number];
}
else(@anomalies[i]="ALT DEV/EXCURSION FROM ASSIGNED"){
$4="YES";
@position[$number];
}
}
print OUT "$1|$position[$number]|$2|
}
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.
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(/;/,$fiel ds[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
#!/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(/;/,$fiel
@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.
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.
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.
ASKER
The answer is no it is not in the substring twice.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Adjusted points from 0 to 25
ASKER
Thanks
ASKER
for $field[11] and 30 anomalies so the position
of the aomalies can't be hardcoded.
I will ADD 200 points tomorrow