maeglor: (Default)
[personal profile] maeglor
А чтобы было еще смешнее скажу, что перед единственым использованием этого творения, стоит проверка на числовое значение передаваемой строки. :)

float TSettingsChart::FmtStr(AnsiString &Value)
{
 float Result;
 AnsiString StrRes="0"; // 0, чтобы, если изображение в колонке отсутствует, привести к float.
 char buff[1];
 try
 {
   Set <char,'0','9'> D_S;
   D_S<<'0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9';
   for(int i=1;i<len(Value);i++)
   {
    strcpy(buff,Value.SubString(i, 1).c_str());
    if (D_S.Contains(buff[0]) || Value.SubString(i, 1)==".")
      StrRes += Value.SubString(i, 1);
   }

   Result = StrRes.ToDouble();
 }
 catch(Exception &e)
 {
   Application->ShowException(&e);
 }
 return Result;
}

Date: 2010-07-02 05:36 pm (UTC)
From: [identity profile] meanor.livejournal.com
А мне нравится, хороший код, всё понятно, что происходит. ))
Правда не совсем понятно, что будет выдано на строке типа
"Мама пришла из магазина. Она купила 1 булку, 3 огурца и брюкву. Завтра 8-е марта!"

Как работает ToDouble() для ".13.8"?

Date: 2010-07-04 04:38 pm (UTC)
From: [identity profile] subbotenok.livejournal.com
Кидает эксепшен :). И в программе включается "паник мод" :).

Программа начиает гнать феерический бред, когда у нас в региональных настройках БД стоит запятая.

Но самое смешное, что эта функция написана для единственного применения (Она вызывается из БД как FmtStr(Field->Text) ), и перед ней стоит проверка, на числовое значение TField::IsNumber().

Date: 2010-07-05 08:42 am (UTC)
From: [identity profile] meanor.livejournal.com
Да это всё ерунда, можно всегда использовать подобную функцию, когда надо привести строку к числу, а IsNumber() проверять, ради того, чтобы выполнить какие-то действия в else. ))

PS
По-моему там ловится эксепшн. Откуда тогда "паник мод"?

Date: 2010-07-05 10:52 am (UTC)
From: [identity profile] subbotenok.livejournal.com
Паник мод потому что это все происходит при построении диаграммы. Представь себе реакцию обычного юзверя, который кликнул по кнопке "построить диаграмму" и получил сообщение о преобразовании типов :).

Здесь, на самый худой конец, эксепшен должен подавляться, а функция должна возвратить 0.

Date: 2010-07-05 10:59 am (UTC)
From: [identity profile] meanor.livejournal.com
Вообще наверное, да. Или ещё какая-то логика, если хочется сделать эту функцию всегда работающей без эксепшнов.

Date: 2010-07-05 08:44 am (UTC)
From: [identity profile] meanor.livejournal.com
А вот настройки БД у вас явно как-то криво парсятся. ;-)

Date: 2010-07-05 10:51 am (UTC)
From: [identity profile] subbotenok.livejournal.com
А они вообще не парсяцца. ;)

Date: 2010-07-04 04:27 pm (UTC)
From: [identity profile] corviniol.livejournal.com
Если не ошибаюсь - кинет столь нужный нам Exception.

March 2017

S M T W T F S
   1234
5678 91011
12131415161718
19202122232425
262728293031 

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 20th, 2017 12:15 pm
Powered by Dreamwidth Studios