2

私はPerlを初めて使用し、12行8列のタブ区切りファイルを取得し、データに対していくつかの計算を実行してから、同じ形式の行と列を持つ新しいファイルにエクスポートする必要があります。ファイルを配列にインポートする必要があると思いますが、インポートに関して何か特別なことはありますか?複数の配列にインポートする必要があるのか​​、多次元配列にインポートする必要があるのか​​、それともすべてのデータの通常の配列にインポートする必要があるのか​​わかりません。それでは、同じ形式になるようにデータをエクスポートすることについて何か特別なことはありますか?道に迷いました!これが理にかなっていることを願っています!これが私がこれまでにしたことです:

#Pseudocode:
#Ask user for the path to the input file
#Ask user for the dilution factor
#Ask user for the path to the output file
#Read in the file with columns and rows
#Put all data into 1 array

#For each index of above array:
#Multiply given OD readings by 50ug/ul 
#Multiply all readings by dilution factor from user 
#Print converted values into the tab-delimited output folder with 12 columns * 8 rows

#Add header to output file to describe what was done
##################################################

#This program converts absorbance data from a file into DNA concentration based on a     standard     conversion
#factor of 50ug/ul and a dilution factor given by a user.
#It then prints the converted values into an output folder of the same dimensions of the             original and adds a header.

#!/usr/bin/perl -w

print "Please enter the pathway to the file containing the UV spec data: \n";
$input_file = <STDIN>;

chomp $input_file;

    unless (open(INPUTFILE, $input_file))
{
    print "Cannot open file \"$input_file\"\n\n";
    exit;
}
@input_data = <INPUTFILE>;

close INPUTFILE;

$input_data = join('', @input_data);    #puts data into a single string for easier     processing???

$input_data =~ s/\s//g;         #remove any whitespace

print "Please enter the dilution factor for these samples: \n";
$dilution_factor = <STDIN>;
chomp $dilution_factor;

foreach my $calc_data (@input_data)
{
    my $new_conc = $input_data * 50 * $dilution_factor;
    return $new_conc;
}


print "Please enter the pathway for the file you you want to save the converted data in:     \n";
$output_file = <STDIN>;
4

3 に答える 3

2

プログラムを簡素化するために、プログラムのインターフェースを少し変更しました。これが というファイルにあると仮定するとdilute.pl、次のように呼び出します (希釈係数 0.1 を使用):

  $ ./dilute.pl 0.1 < input.dat > output.dat

コードは次のようになります。

  #!/usr/bin/perl

  use strict;
  use warnings;

  # Get the dilution factor from the command line
  my $dilute = shift;

  # Get the input (all at once)
  my $input = do { local $/; <> };

  # Change the values.
  # This assumes that your input is all floating point numbers.
  # You might need to tweak the regex if that's not the case.

  $input =~ s/(\d+\.\d+)/$1 * 50 * $dilute/eg;

  # Write the output
  print $input;
于 2012-05-05T08:50:54.363 に答える
0
#!/usr/bin/perl -w

$header = 'This file gives the concentration of the DNA based on OD value, dilution, and     concentration.';

print "Please enter the pathway to the file containing the UV spec data: \n";
$input_file = <STDIN>;

chomp $input_file;

unless (open(INPUTFILE, $input_file))
{
    print "Cannot open file \"$input_file\"\n\n";
    exit;
}
close INPUTFILE;

# Get the dilution factor from the command line
my $dilute = shift;

# Get the input (all at once)
my $input_data = do { local $/; <> };

# Change the values.

$input_data =~ s/(\d+\.\d+)/$1 * 50 * $dilute/eg;

# Write the output to the output file

$output_file = "calc_values";
unless (open(CALCVALUES, ">$output_file"))
{
    print "Cannot open file \"$output_file\"\n\n";
    exit;
}

format CALCVALUES =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  <<<<<<<<<<<<<<<<<<<<<<<<...
$header

^<<<<<<<<<<<~~
$output_file
.

write;
exit;
于 2012-05-06T04:09:39.037 に答える