Форум: "Прочее";
Текущий архив: 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