Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];

Вниз

Люди, которые пишут begin..end вокруг одного оператора   Найти похожие ветки 

 
Игорь Шевченко ©   (2012-12-17 15:16) [200]

Компромисс1   (17.12.12 12:47) [199]


> if S.Count > 0 then
> begin
>  for I := 0 to S.Count - 2 do
>  begin
>      writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||",
> [S[I]]))
>  end;
>  // последняя строка
>   writeln(T, Format("   ""%s""", [S[S.Count-1]]));
> end;


непонятно

Sha ©   (17.12.12 12:32) [197]


> Я бы и этот вариант развернул.
> Спрашивается, нафига там формат, а не обычное сцепление?
>


Кстати, да. Формат там ни к селу


> Сейчас как раз ковыряю корпоративный софт.
> Настоящее лекарство от альцгеймера:
> ребусы, кроссворды, анекдоты рядом не стояли.


Не сыпь мне соль на рану :)


 
Компромисс1   (2012-12-17 15:20) [201]

А так?

Count := S.Count;
if Count > 0 then
begin
// обработаем все элементы, кроме последнего
 for I := 0 to Count - 2 do
 begin
     writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||",
[S[I]]))
 end;
 // теперь обработаем последний элемент
  writeln(T, Format("   ""%s""", [S[Count-1]]));
end;


 
Игорь Шевченко ©   (2012-12-17 15:27) [202]

Компромисс1   (17.12.12 15:20) [201]

Меня смущает фраза Count - 2 в обоих вариантах кода


 
vuk ©   (2012-12-17 15:31) [203]

Если так свербит из-за этого IIF, то его надо просто раскрыть в доп. переменную:


>   for I := 0 to S.Count - 1 do
>   begin
>     if i <> s.Count - 1 then
>       tmp := "||CHR(13)||CHR(10)||"
>     else
>       tmp := "";
>     writeln(T, Format("   ""%s%s", [s[i], tmp]));
>   end;

И, кстати, в данном применении этот IIF использует исключительно константы, поэтому при его использовании ничего дпоплнительно не вычисляется. А стоит ли такие конструкции применять - это дело личное и читаемость только дело привычки. А то так можно дойти и до того, что вызовы функций ведут к тому, что непонятно что в коде делается. :)


 
Kerk ©   (2012-12-17 15:34) [204]

Видел однажды такую ситуацию:

SomeVar := IIF(Obj = nil, SomeDefaultValue, Obj.ParamValue);

:)


 
Компромисс1   (2012-12-17 15:38) [205]

Тогда можно заменить Count на LastIndex

LastIndex := S.Count - 1;
if LastIndex >= 0 then
begin
// обработаем все элементы, кроме последнего
 for I := 0 to LastIndex - 1 do
 begin
     writeln(T, Format("   ""%s""||CHR(13)||CHR(10)||",
[S[I]]))
 end;
 // теперь обработаем последний элемент
  writeln(T, Format("   ""%s""", [S[LastIndex]]));
end;

Сейчас вроде нет никаких -2, все логично и привычно


 
Kerk ©   (2012-12-17 15:39) [206]

Офигеть как тебе удалось все запутать :)))


 
Аббат Пиккола   (2012-12-17 15:39) [207]

У одного амеиканского автора как-то читал, что формат работает быстрее, чем "обычное сцепление" строк в Дельфи. Сам не проверял.


 
Компромисс1   (2012-12-17 15:54) [208]

Это я еще плохо запутал :) Обычно я overuse functions и vars и пишу так:
Count := S.Count;
if(Count > 0) then
begin
 ProcessAllButLast(...)
 ProcessLast(...)
end;

но данном конкретном случае я бы постарался не отличать последнюю строку от предпоследней, уменьшив длину строки на N после цикла, чтобы избавиться от ненужных разделителей строк


 
Компромисс1   (2012-12-17 15:54) [209]

Это я еще плохо запутал :) Обычно я overuse functions и vars и пишу так:
Count := S.Count;
if(Count > 0) then
begin
 ProcessAllButLast(...)
 ProcessLast(...)
end;

но данном конкретном случае я бы постарался не отличать последнюю строку от предпоследней, уменьшив длину строки на N после цикла, чтобы избавиться от ненужных разделителей строк


 
Игорь Шевченко ©   (2012-12-17 16:06) [210]

Аббат Пиккола   (17.12.12 15:39) [207]


> У одного амеиканского автора как-то читал, что формат работает
> быстрее, чем "обычное сцепление" строк в Дельфи. Сам не
> проверял.


"Не верь, хозяин, этому константинопольскому ходже".
С чего ради ему работать быстрее ?


 
O'ShinW ©   (2012-12-17 17:06) [211]

это легко проверить
вроде, так?

var
 s1, s2, s: string;
 i,j: integer;
 t1,t2: Cardinal;
begin
 {$O-}
 for j := 0 to 9 do
 begin
   t1 := GetTickCount;
   for i := 0 to 9999999 do
   begin
     s1 := "qw";
     s2 := "er" + IntToStr(1);
     s := s1 + s2;
     if s = "qwer2" then ShowMessage("мда?"); //пусть еще и к результату обратится
   end;
   t1 := GetTickCount - t1;

   t2 := GetTickCount;
   for i := 0 to 9999999 do
   begin
     s1 := "qw";
     s2 := "er" + IntToStr(1);
     s := Format("%s%s",[s1,s2]);
     if s = "qwer2" then ShowMessage("мда? ");
   end;
   t2 := GetTickCount - t2;

   mmo1.Lines.Add(Format("%d(+) %d(fmt)",[t1, t2]));
 end;
 {$O+}
end;


 
O'ShinW ©   (2012-12-17 17:09) [212]

явных предпочтений нет,
6115(+) 5569(fmt)
5788(+) 5834(fmt)
6349(+) 5897(fmt)
6022(+) 6084(fmt)
6443(+) 5709(fmt)
5835(+) 5444(fmt)
6100(+) 5616(fmt)
5647(+) 5320(fmt)
5444(+) 5866(fmt)
5897(+) 6146(fmt)

хотя в асмах там по-другому
LStrCat3 vs (Более долго что-то)


 
Игорь Шевченко ©   (2012-12-17 17:29) [213]

O"ShinW ©   (17.12.12 17:06) [211]

Ты работу со строками в Delphi себе представляешь ?


 
O'ShinW ©   (2012-12-17 17:51) [214]


> Игорь Шевченко ©   (17.12.12 17:29) [213]

честно - не очень. Надо будет посмотреть.
Знаю, что отличается от других, С-подобных


 
Аббат Пиккола   (2012-12-17 18:07) [215]

2 O"ShinW ©
А если взять строки подлиннее?


 
Студент   (2012-12-17 18:16) [216]

Kerk ©   (17.12.12 15:34) [204]

И в чем тут криминал?


 
RWolf ©   (2012-12-17 18:57) [217]


> [216]

в AV, вестимо.



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Прочее";
Текущий архив: 2013.04.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.01 MB
Время: 0.035 c
15-1355922292
картман
2012-12-19 17:04
2013.04.14
хочу 32 часа


15-1355208502
alexdn
2012-12-11 10:48
2013.04.14
Пхп


2-1349547213
Valentin1111111
2012-10-06 22:13
2013.04.14
Множества дельфи


4-1264548546
hattak
2010-01-27 02:29
2013.04.14
Скриншот свёрнутого окна


2-1349695018
aka
2012-10-08 15:16
2013.04.14
SSH cryptlib, кто работал с этим?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский