#!/usr/local/bin/perl $filename="gr3df97a.txt"; open(OUTFILE, ">franceirreg"); open(FILE, $filename) || die($filename." not found.\n"); # Read in the whole file into atts array (one line per array element) @inputdata = ; close(FILE); # For each height value in the input file foreach $inputline(@inputdata) { chomp($inputline); # Remove new line character # If the first character of the line is a number, i.e. this is a data line if (substr($inputline,0,1) =~ /[0-9]/) { ($num, $longrgf, $latrgf, $dx, $dy, $dz, $acccode, $mapsheet) = split(/\s+/, $inputline); $command = "echo '".$longrgf." ".$latrgf."' | \ cs2cs -f %.3f +proj=longlat +ellps=GRS80 +to +proj=geocent +ellps=GRS80 | \ awk '{printf \"%.3f\\t%.3f\\t%.3f\\n\", \$1-(".$dx."), \$2-(".$dy."), \$3-(".$dz.")}' | \ cs2cs -f %.9f +proj=geocent +ellps=clrk80 +to +proj=longlat +ellps=clrk80 | \ awk '{printf \"%.9f\\t%.9f\\n\", \$1, \$2}'\n"; ($longntf, $latntf) = split(/\s+/, `$command`); $latdiff = $latrgf - $latntf; $longdiff = $longrgf - $longntf; if ($acccode eq "01") { $acc = 0.05; } if ($acccode eq "02") { $acc = 0.1; } if ($acccode eq "03") { $acc = 0.2; } if ($acccode eq "04") { $acc = 0.5; } if ($acccode eq "99") { $acc = 1.0; } printf(OUTFILE "%.9f\t%.9f\t%.9f\t%.9f\t%.2f\n",$longntf,$latntf,$longdiff,$latdiff,$acc); } } close(OUTFILE);