Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена в Perl, Нужна Ваша помощь! 
:(
    Опции темы
CLSAMG
Дата 14.10.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.10.2010
Где: Пенза

Репутация: нет
Всего: нет



Вооообщем все числа с плавающей точкой заменить на запись чисел в формате с фиксированной точкой.

Вот код скрипта:
Код

$txt="2.5e+2 5.6e-1 .e12 .e1213"; 
$txt=~s/([+-]?\d?\.\d?)[eE]([-+]?\d?)/$1*(10**$2)/ge; 
print "$txt\n";


А теперь вопрос:
Почему при подсчете числа .e12 и .e1213 выводит не правильные ответы?
Помогите устранить проблему!
Буду очень признателен!)
PM MAIL ICQ Skype   Вверх
Jimy
Дата 15.10.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Perl не возведет 10 в степень 1213.
PM   Вверх
CLSAMG
Дата 15.10.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.10.2010
Где: Пенза

Репутация: нет
Всего: нет



Цитата

Perl не возведет 10 в степень 1213.

Хорошо это я понял!

А как же .e12 Perl выводит не правильный результат.
Почему?
PM MAIL ICQ Skype   Вверх
Jimy
Дата 15.10.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Цитата(CLSAMG @ 15.10.2010,  14:05)
Почему?

1. Видимо, потому что в регулярном выражении есть ошибка.

2. Ваш способ не подходит для данной задачи. В ряде случаев, Вы получите тоже самое значение, что и на входе - т.е. оно никак не будет преобразовано.
PM   Вверх
CLSAMG
Дата 15.10.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.10.2010
Где: Пенза

Репутация: нет
Всего: нет



Jimy не могли бы помоч решить эту проблему с регулярным выражением???
Буду очень Вам признателен!smile
PM MAIL ICQ Skype   Вверх
Jimy
Дата 15.10.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Вы видимо хотели получить что-то типа этого:
Код

$txt=~s/([-+\d\.]+)e([-+\d]*)/($1 eq '.' ? 1 : $1)*(10**$2)/gei;


PM   Вверх
CLSAMG
Дата 15.10.2010, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.10.2010
Где: Пенза

Репутация: нет
Всего: нет



Jimy Простите за назойливость не могли бы Вы пояснить, что это означает:
Код
($1 eq '.' ? 1 : $1)

PM MAIL ICQ Skype   Вверх
Jimy
Дата 16.10.2010, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

Репутация: нет
Всего: 3



Это означает, то если перед "e" стоит точка, то ее заменить на единицу, иначе оставить как есть.
Я же правильно понял, что в вашем случае запись .e12 равносильна 1e12? Поскольку первый вариант записи некорректен в Perl, я сделал такое предположение.
PM   Вверх
CLSAMG
Дата 16.10.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.10.2010
Где: Пенза

Репутация: нет
Всего: нет



Спасбо большооое Jimy!smile
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.