Mercurial > repos > devteam > tables_arithmetic_operations
comparison tables_arithmetic_operations.pl @ 0:82fa5062d611 draft
Imported from capsule None
| author | devteam |
|---|---|
| date | Tue, 01 Apr 2014 10:48:45 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:82fa5062d611 |
|---|---|
| 1 # A program to implement arithmetic operations on tabular files data. The program takes three inputs: | |
| 2 # The first input is a TABULAR format file containing numbers only. | |
| 3 # The second input is a TABULAR format file containing numbers only. | |
| 4 # The two files must have the same number of columns and the same number of rows | |
| 5 # The third input is an arithmetic operation: +, -, *, or / for addition, subtraction, multiplication, or division, respectively | |
| 6 # The output file is a TABULAR format file containing the result of implementing the arithmetic operation on both input files. | |
| 7 # The output file has the same number of columns and the same number of rows as each of the two input files. | |
| 8 # Note: in case of division, none of the values in the second input file could be 0. | |
| 9 | |
| 10 use strict; | |
| 11 use warnings; | |
| 12 | |
| 13 #variables to handle information of the first input tabular file | |
| 14 my $lineData1 = ""; | |
| 15 my @lineDataArray1 = (); | |
| 16 my $lineArraySize = 0; | |
| 17 my $lineCounter1 = 0; | |
| 18 | |
| 19 #variables to handle information of the second input tabular file | |
| 20 my $lineData2= ""; | |
| 21 my @lineDataArray2 = (); | |
| 22 my $lineCounter2 = 0; | |
| 23 | |
| 24 my $result = 0; | |
| 25 | |
| 26 # check to make sure having the correct number of arguments | |
| 27 my $usage = "usage: tables_arithmetic_operations.pl [TABULAR.in] [TABULAR.in] [ArithmeticOperation] [TABULAR.out] \n"; | |
| 28 die $usage unless @ARGV == 4; | |
| 29 | |
| 30 #variables to store the names of input and output files | |
| 31 my $inputTabularFile1 = $ARGV[0]; | |
| 32 my $inputTabularFile2 = $ARGV[1]; | |
| 33 my $arithmeticOperation = $ARGV[2]; | |
| 34 my $outputTabularFile = $ARGV[3]; | |
| 35 | |
| 36 #open the input and output files | |
| 37 open (INPUT1, "<", $inputTabularFile1) || die("Could not open file $inputTabularFile1 \n"); | |
| 38 open (INPUT2, "<", $inputTabularFile2) || die("Could not open file $inputTabularFile2 \n"); | |
| 39 open (OUTPUT, ">", $outputTabularFile) || die("Could not open file $outputTabularFile \n"); | |
| 40 | |
| 41 #store the first input file in the array @motifsFrequencyData1 | |
| 42 my @tabularData1 = <INPUT1>; | |
| 43 | |
| 44 #store the second input file in the array @motifsFrequencyData2 | |
| 45 my @tabularData2 = <INPUT2>; | |
| 46 | |
| 47 #reset the $lineCounter1 to 0 | |
| 48 $lineCounter1 = 0; | |
| 49 | |
| 50 #iterated through the lines of the first input file | |
| 51 INDEL1: | |
| 52 foreach $lineData1 (@tabularData1){ | |
| 53 chomp ($lineData1); | |
| 54 $lineCounter1++; | |
| 55 | |
| 56 #reset the $lineCounter2 to 0 | |
| 57 $lineCounter2 = 0; | |
| 58 | |
| 59 #iterated through the lines of the second input file | |
| 60 foreach $lineData2 (@tabularData2){ | |
| 61 chomp ($lineData2); | |
| 62 $lineCounter2++; | |
| 63 | |
| 64 #check if the two motifs are the same in the two input files | |
| 65 if ($lineCounter1 == $lineCounter2){ | |
| 66 | |
| 67 @lineDataArray1 = split(/\t/, $lineData1); | |
| 68 @lineDataArray2 = split(/\t/, $lineData2); | |
| 69 | |
| 70 $lineArraySize = @lineDataArray1; | |
| 71 | |
| 72 for (my $index = 0; $index < $lineArraySize; $index++){ | |
| 73 | |
| 74 if ($arithmeticOperation eq "Addition"){ | |
| 75 #compute the additin of both values | |
| 76 $result = $lineDataArray1[$index] + $lineDataArray2[$index]; | |
| 77 } | |
| 78 | |
| 79 if ($arithmeticOperation eq "Subtraction"){ | |
| 80 #compute the subtraction of both values | |
| 81 $result = $lineDataArray1[$index] - $lineDataArray2[$index]; | |
| 82 } | |
| 83 | |
| 84 if ($arithmeticOperation eq "Multiplication"){ | |
| 85 #compute the multiplication of both values | |
| 86 $result = $lineDataArray1[$index] * $lineDataArray2[$index]; | |
| 87 } | |
| 88 | |
| 89 if ($arithmeticOperation eq "Division"){ | |
| 90 | |
| 91 #check if the denominator is 0 | |
| 92 if ($lineDataArray2[$index] != 0){ | |
| 93 #compute the division of both values | |
| 94 $result = $lineDataArray1[$index] / $lineDataArray2[$index]; | |
| 95 } | |
| 96 else{ | |
| 97 die("A denominator could not be zero \n"); | |
| 98 } | |
| 99 } | |
| 100 | |
| 101 #store the result in the output file | |
| 102 if ($index < $lineArraySize - 1){ | |
| 103 print OUTPUT $result . "\t"; | |
| 104 } | |
| 105 else{ | |
| 106 print OUTPUT $result . "\n"; | |
| 107 } | |
| 108 } | |
| 109 next INDEL1; | |
| 110 } | |
| 111 } | |
| 112 } | |
| 113 | |
| 114 #close the input and output files | |
| 115 close(OUTPUT); | |
| 116 close(INPUT2); | |
| 117 close(INPUT1); |
