2015-04-30 4 views
1

У меня есть .txt-файл как результат из программы, содержащий некоторые интересующие значения. Проблема в том, что в некоторых случаях эти значения имеют странный формат, и я не могу применять к ним математические операции.Float Number математическая операция

Например: Мой файл содержит следующие цифры:

-2.55622-3 
-0.31-2 
-3.225-2 
... 

Эти цифры в обычном формате математике должно быть:

-2.55622e-03 
-0.31e-02 
-3.225e-02 

если, конечно, я пытаюсь суммировать эти значения, то это ошибка:

can't use non-numeric string as operand of "+" 

Как я могу работать с моими первоначальными значениями? У меня действительно нет идей. Пожалуйста, помните, что я не могу изменить формат значений моего .txt-файла

ответ

4

Другой подход:

% exec cat file 
-2.55622-3 
-0.31-2 
-3.225-2 
42 
foo 
% set fh [open "file" r] 
% while {[gets $fh line] != -1} { 
    puts -nonewline "\"$line\"\t=> " 
    if {! [regsub {[-+]\d+$} [string trim $line] {e&} num]} {set num $line} 
    puts -nonewline "$num\t=> " 
    puts [expr {$num + 0}] 
} 
"-2.55622-3 " => -2.55622e-3 => -0.00255622 
"-0.31-2"  => -0.31e-2  => -0.0031 
"-3.225-2"  => -3.225e-2 => -0.03225 
"42" => 42 => 42 
can't use non-numeric string as operand of "+" 
"foo" => foo => % 
0

Попробуйте ввести цифры regsub с рисунком (\d+.\d+).

set fp [open "somefile.txt" r] 
set file_data [read $fp] 
close $fp 
set data [split $file_data "\n"] 
foreach line $data { 
set e "e" 
set number [ regexp -all -inline {(\d+.\d+)} $line ] 
regsub -all {(\d+.\d+)} $number "$number$e" number 

}

Например прочитать файл и разделить линиями. номер

set e "e" 

Поиск по:

set number [ regexp -all -inline {(\d+.\d+)} $line ] 

замените

regsub -all {(\d+.\d+)} $number "$number$e" number 
+1

Я не уверен, что это лучшее решение, так как OP Ждут» t упоминаем, что это единственный вид чисел, присутствующих в файле. Я имею в виду, что у вас может быть строка типа '2.3', и ваш код преобразует ее в' 2.3e', что неверно, даже если '2.3-4' будет правильно преобразован в' 2.3e-4'. – Jerry

Смежные вопросы