Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [PERL]Сложить все числа, найденные в файле.


Автор: weblogger 22.12.2007, 20:02
Добрый день! Необходима очень помощь в решении следующей задачи на перле: Имеется текстовый файл. Скрипт должен выбрать из него числа и вывести их сумму.
Аналогичная задача была найдена у Вас на форуме
http://forum.vingrad.ru/topic-184377.html
Все точно так же, 
Цитата

Т.е. например найдена строки чисел 123 и 432, надо:
1й случай, сложить 1+2+3+4+3+2
2й случай 123+432

Только необходимо также брать во внимание числа с отрицательным знаком, а так же дробные числа( 0.2, -3.53, и т.д.).
Спасибо огромное всем , кто поможет, в перле не силен, а задачку нужно решить...
Спасибо!

Автор: under_sun 22.12.2007, 23:22
Если необходимо вытаскивать из файла действительные числа, то как расценивать такую ситуацию:
1.2.3 ? или такую 1.2.3.4 ?

Автор: weblogger 23.12.2007, 23:48
Хм, да, действительно не подумал...
думаю тогда не стоит учитывать возможность действительных чисел, добавить только возможность одсчета с отрицательным знаком...
Спасибо, что откликнулись!

Автор: weblogger 25.12.2007, 14:05
Помогите, пожалуйста, в среду нужно сдать задачку....

Автор: under_sun 25.12.2007, 17:33
Как тут http://forum.vingrad.ru/topic-184377.html, только подправь второй случай:
Код

$sum2 += $_  for( /(-?\d+)/g ); #2й случай

Автор: weblogger 26.12.2007, 20:24
Спасибо большое!
Первый случай
Код

 $sum1 += $_  for( /(\d)/g ); #1й случай

оказался не нужен.
Правда преподаватель попросил всетаки добавить возможность выбора действительных чисел, и сказал что нужно выбирать только "правильные" числа, например если находится число 10.10.20.30 то это неправильное число, и его учитывать в операциях не нужно. 10.12 - правильное число. То есть то, что в принципе не может быть числом учитывать не нужно, ip адресы всякие или просто набор цифр и точек без пробелов.
Так же попросил сделать, чтобы находила и числа в экспоненциальной форме, то есть например 2.3E4 или  2.3E-4 или 24e-13 или 63E12 (чтобы буква E и e определялись, не зависимо от регистра). Их так же необходимо складывать.
Если есть возможность, помогите, пожалуйста.
Спасибо!

Автор: weblogger 27.12.2007, 17:30
Плиз, если есть возможность, помогите =(

Автор: under_sun 28.12.2007, 20:06
Код

$_ = "12.34 eee 6 kkk 2.3E4  2.3E-4 ccc 24e-13 xxx 63E12";
for ( split ) {
  $sum += $_ if ( /([+-]?)(?=\d|\.\d)\d*(\.\d*)?(e([+-]?\d+))?/i );
}
print $sum;


C тебя пиво  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)