Форум: "Прочее";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
ВнизВот как надо на си шарп писать Найти похожие ветки
← →
TUser © (2008-04-17 08:03) [40]> kaif © (17.04.08 02:54) [38]
Все верно. Но. Задачи бывают разные. Программы бывают разные. Кусочки у этих программ бывают разные. Бывает, что где-то важна скорость, использование памяти или что-то еще. Тогда мы напишем оптимально. Мы, ежели надо, ассемблер выучим. А бывает, что важнее другое - например, скорость написания кода или его читабельность. Бывает, что соображения типа "оптимальность алгоритма" идут лесом.
Сабж приведен без контекста, в котором он использован. А без контекста понять, нормально это или нет, - нельзя. Я бы сам скорее написал что-нибудь вроде for "0".."9" do MyStr := StringReplace (), а не сабж, но буфер дополнительный у меня тоже бы аллокировался.
Что касается подобных проблем, то существуют языки, где такие дела вообще никак нельзя контролировать - от жавыскрипта до питона со всеми остановками. У этих языков есть своя ниша, где они востребованы.
← →
TUser © (2008-04-17 08:03) [41]> kaif © (17.04.08 02:54) [38]
Все верно. Но. Задачи бывают разные. Программы бывают разные. Кусочки у этих программ бывают разные. Бывает, что где-то важна скорость, использование памяти или что-то еще. Тогда мы напишем оптимально. Мы, ежели надо, ассемблер выучим. А бывает, что важнее другое - например, скорость написания кода или его читабельность. Бывает, что соображения типа "оптимальность алгоритма" идут лесом.
Сабж приведен без контекста, в котором он использован. А без контекста понять, нормально это или нет, - нельзя. Я бы сам скорее написал что-нибудь вроде for "0".."9" do MyStr := StringReplace (), а не сабж, но буфер дополнительный у меня тоже бы аллокировался.
Что касается подобных проблем, то существуют языки, где такие дела вообще никак нельзя контролировать - от жавыскрипта до питона со всеми остановками. У этих языков есть своя ниша, где они востребованы.
← →
ferr (2008-04-17 10:55) [42]дет сад..
> [38] kaif © (17.04.08 02:54)
никогда не смотрите на функциональные языки, обычно там всё так неоптимально.. так неоптимально..
а если уж по сабжу то для меня вариант один, примерно так : return new Regex(@"^\d+$").IsMatch(s);
← →
Дмитрий С (2008-04-17 16:53) [43]
> а если уж по сабжу то для меня вариант один, примерно так
> : return new Regex(@"^\d+$").IsMatch(s);
А так по идее быстрее будет =)
return ! (new Regex(@"[^\d]").IsMatch(s));
← →
TUser © (2008-04-17 17:30) [44]Только не доказвайте, что это - понятнее.
← →
Polevi (2008-04-17 17:55) [45]это смотря кто смотрит
← →
Mystic © (2008-04-17 21:03) [46]
> Вместо этого, ИМХО, нормальный программист, близкий так
> сказать "к железу" (скажем, дельфист) предпочтет заменить
> символы цифр на символ пробела (пусть даже он бы воспользовался
> подобной идеей, находя ее "красивой"), а затем применение
> однократной функции типа Trim(). Тогда все можно будет реализовать
> в одном буфере и не аллокировать 10 раз новую память.
Ничего не даст. В C# строки константные (для обеспечения потокобезопасности), так что если ты меняешь один символ в строке на другой, то все равно будет выделена новая память.
Кстати, метод int.parse не эквивалентен данному. Ибо в строке может быть штрихкод из 20 символов, что не поместится в int. Regex тоже не оптимальный вариант, потому что каждый раз будет выполняться построение конечного автомата для разбора регулярного выражения.
← →
palva © (2008-04-17 21:11) [47]
> Ничего не даст.
Ну да, не даст. Для замысловатых модификаций строк есть специальный тип StringBuilder.
Но в данной задаче модификаций, естественно, не требуется.
← →
DiamondShark © (2008-04-17 21:18) [48]
> Regex тоже не оптимальный вариант, потому что каждый раз
> будет выполняться построение конечного автомата для разбора
> регулярного выражения.
это если писать return new Regex(@"^\d+$").IsMatch(s);
А если объект создать один раз, да ещё с опцией компиляции, то нормально.
← →
Поп Гапон (2008-04-17 23:31) [49]
> tesseract © (16.04.08 11:51) [5]
>
>
> > Ega23 © (16.04.08 11:47) [4]
>
>
> Мдя... С++ -ую логику не отнимешь. На тебе 1с-вский , от
> франчей достался:
Ммм... во франчи что ли пойти. Им на 8.* больше чем делфистам и сишникам раза в два в Киеве платят.
← →
Поп Гапон (2008-04-17 23:35) [50]База была на Access где было 60 полей в строке Fax1,Fax2...Fax60 ну и подобные маразмы
function TTemplateHelper.CreateOtherContacts(ADOQuery: TADOQuery): WideString;
const
cFaxName = "Fax";
cPhoneContactString =
"<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ............................................................................<Cha rStyle:><ParaStyle:Txt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
cPhoneWithCodeContactString =
"<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ....................................................................<CharStyle:> <ParaStyle:Txt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
cMobileContactString =
"<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ........................................................<CharStyle:><ParaStyle:T xt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
cICQContactString = "<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ............................................................................<Cha rStyle:><ParaStyle:Txt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
cFaxContactString =
"<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ..................................................................<CharStyle:><P araStyle:Txt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
cFaxWithCodeContactString =
"<ParaStyle:Txt\_tel><CharStyle:Txt\_ram>$#$Type$#$ ..........................................................<CharStyle:><ParaStyle :Txt\_tel><CharStyle:Tel\_ram> $#$Value$#$<CharStyle:>"+ #13 + #10;
var
FaxCount: integer;
Fax1, Fax2: WideString;
lResStr: WideString;
lPhoneCode: WideString;
lCode, lNumber: WideString;
begin
Result := "";
//
FaxCount := 0;
while True do
begin
Fax1 := GetItemForReplace(ADOQuery, cFaxName + IntToStr(FaxCount + 1));
Fax2 := GetItemForReplace(ADOQuery, cFaxName + IntToStr(FaxCount + 2));
//увеличиваем
inc(FaxCount, 2);
//проверяем значения и распихиваем по шаблону
if Trim(Fax1) = "" then Break;
//получаем телефонный код города
lPhoneCode := GetPhoneCode;
//парсим на код и телефон
ParsePhoneNumber(Fax2, lCode, lNumber);
if lCode <> "" then
begin
lPhoneCode := lCode;
Fax2 := lNumber;
end;
//по умолчанию
lResStr := cPhoneContactString;
//иначе производим проверки
if CheckForICQ(Fax1) then
begin
Fax2 := ICQSpaced(Fax2);
lResStr := cICQContactString;
end;
if CheckForMobile(Fax1) then
begin
Fax1 := "Моб_льний";
lResStr := cMobileContactString;
end;
//телефон с учетом кода города
if CheckForPhone(Fax1) then
begin
if (lPhoneCode <> "") then
lResStr := cPhoneWithCodeContactString
else
lResStr := cPhoneContactString;
end;
//Факс с учетом кода города
if CheckForFax(Fax1) then
begin
Fax1 := "Тел. /факс";
if (lPhoneCode <> "") then
lResStr := cFaxWithCodeContactString
else
lResStr := cFaxContactString;
end;
//если не ICQ то добавляем код города
if (lPhoneCode <> "") and (not CheckForICQ(Fax1)) then
Fax2 := lPhoneCode + " " + PhoneSpaced(Fax2);
//иначе просто форматируем телефон
if (lPhoneCode = "") and (not CheckForICQ(Fax1)) then
Fax2 := PhoneSpaced(Fax2);
//подставляем
lResStr := Tnt_WideStringReplace(lResStr, "$#$Type$#$",Fax1, [rfReplaceAll, rfIgnoreCase]);
lResStr := Tnt_WideStringReplace(lResStr, "$#$Value$#$",Fax2, [rfReplaceAll, rfIgnoreCase]);
Result := Result + lResStr;
end;
end;
← →
Real © (2008-04-18 04:01) [51]
> Мдя... С++ -ую логику не отнимешь. На тебе 1с-вский , от
> франчей достался:
Пипец, и это считается нормальным со стороны 1С? Или это пример стеба?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2008.06.01;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.052 c