/ / Obtención de perl para imprimir en notación no científica - perl, notación científica

Obtención de Perl para imprimir en notación no científica - Perl, notación científica

Estoy corriendo

./script.pl 69032 text.txt

Donde contiene text.txt

1   29  239 6

Y me estoy poniendo

1   29  239 8.69162127708889e-05

Como salida pero solo quiero que el último número sea

1   29  239 .0000869162127708889

Este es mi guion

$percent=$ARGV[0];
shift;
while(<>){
my $temp = $_;
my ($num, $start, $stop, $exp) = split("t", $temp);
if( defined($exp)){
print $num,"t",$start,"t",$stop,"t",$exp/$percent,"n";
}
}

Respuestas

4 para la respuesta № 1

Utilizar printf para la impresión formateada. Los detalles de los especificadores de formato se dan en sprintf.

printf("%dt%dt%dt%10.8fn", $num, $start, $stop, $exp/$percent);

La cuerda dentro "..." Es donde especificas como formatear. El resto es una lista de variables que se utilizan en la cadena para cada % Especificador, en general, en el orden en que vienen. los sprintf devuelve una cadena, mientras printf imprime a STDOUT, o a otro identificador de archivo si se da como primer argumento, printf($fh "...", @vars). Esta es una de las herramientas más venerables, buenas y antiguas.

Arriba tenemos: un entero %d, luego una pestaña t, luego lo mismo dos veces más, luego un número de punto flotante que se imprimirá en el campo de ancho total 10 (incluyendo el punto decimal y un signo posible) con 8 dígitos despues del punto. Los enteros ocupan tanto espacio en la salida como necesitan - uno para 1tres para 239. Si desea alinear la salida, puede especificar el ancho mínimo del campo

printf("%3dt%3dt%3dt%10.8fn", $num, $start, $stop, $exp/$percent);

Ahora cada entero tomará tres espacios, alineados a la derecha. Para alinear a la izquierda usar %-3d. Para tener ceros iniciales dices %03d, para 001. Las cadenas también se pueden imprimir en campos de ancho fijo, por lo que

printf("%4s %6s %6s %12sn", qw(num start stop factor));
printf("%4d %6d %6d %12.8fn", $num, $start, $stop, $exp/$percent);

huellas dactilares

factor de parada de inicio num 1 29 239 0.00008692

Arriba elegí anchos de campo para un cómodo.Diseño y espacios literales utilizados como separadores entre ellos. (Las pestañas se pueden mezclar con la alineación visual si las entradas no encajan en las tabulaciones. Lo que no tiene ningún efecto en el análisis futuro si se envía a un archivo de datos, a pesar de que tampoco hay azúcar para el análisis). Si usa comas en lugar de hace un archivo CSV.

Hay mucho, mucho más que uno puede hacer con esto. Se utiliza para cualquier cosa, desde conversiones de formato precisas a archivos de datos de impresión o informes decentes (ASCII). los sprintf La página está detallada con muchos ejemplos.