/ / Obtendo o perl para imprimir em notação não científica - perl, notação científica

Obtendo o perl para imprimir em notação não científica - perl, notação científica

eu estou correndo

./script.pl 69032 text.txt

Onde text.txt contém

1   29  239 6

E eu estou ficando

1   29  239 8.69162127708889e-05

Como saída, mas eu só quero que o último número seja

1   29  239 .0000869162127708889

Este é meu roteiro

$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";
}
}

Respostas:

4 para resposta № 1

Usar printf para impressão formatada. Os detalhes dos especificadores de formato são fornecidos em sprintf.

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

A corda dentro "..." é onde você especifica como formatar. O restante é uma lista de variáveis ​​que são usadas na string para cada % especificador, em geral na ordem em que eles vêm. o sprintf retorna uma string, enquanto printf imprime para STDOUTou para outro manipulador de arquivo, se fornecido como o primeiro argumento, printf($fh "...", @vars). Esta é uma das ferramentas mais antigas e mais veneráveis.

Acima temos: um inteiro %d, então uma guia t, as mesmas duas vezes mais e, em seguida, um número de ponto flutuante a ser impresso no campo de largura total 10 (incluindo o ponto decimal e um possível sinal) com 8 dígitos após o ponto. Os números inteiros ocupam o espaço necessário na saída - um para 1três para 239. Se você deseja alinhar a saída, pode especificar a largura mínima do campo

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

Agora cada número inteiro ocupará três espaços, alinhados à direita. Para alinhar à esquerda, use %-3d. Para ter zeros à esquerda, você diria %03d, para 001. As strings também podem ser impressas em campos de largura fixa,

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

impressões

num fator de parada inicial 1 29 239 0,00008692

Acima, escolhi as larguras dos campos para umalayout e usou espaços literais como separadores entre eles. (As guias podem interferir no alinhamento visual se as entradas não couberem nas paradas de tabulação. O que não tem efeito na análise futura se for para um arquivo de dados, mesmo que elas também não sejam importantes para a análise.) Se você usar vírgulas, isso também cria um arquivo CSV.

Há muito, muito mais que se pode fazer com isso. É usado para qualquer coisa, desde conversões precisas de formato até impressão de arquivos de dados ou relatórios decentes (ASCII). o sprintf A página é detalhada com muitos exemplos.