Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25690
Рейтинг: 2088
#91: 2011-07-28 17:41:05 ЛС | профиль | цитата
44.gprs.mts.ru писал(а):
я имел в виду экранирование

Ну так попробуй, может получится
карма: 20

0
Разработчик
Ответов: 4690
Рейтинг: 425
#92: 2011-07-28 19:43:04 ЛС | профиль | цитата
nesco писал(а):
Ну так попробуй, может получится

Увы, но нет: code_24750.txt
карма: 10
0
файлы: 1code_24750.txt [390B] [254]
Разработчик
Ответов: 25690
Рейтинг: 2088
#93: 2011-07-28 19:48:01 ЛС | профиль | цитата
Assasin писал(а):
Увы, но нет

Я говорил тебе сделать его в компоненте, а не применять его. Оно же не реализовано
карма: 20

0
Разработчик
Ответов: 4690
Рейтинг: 425
#94: 2011-07-28 19:57:48 ЛС | профиль | цитата
nesco писал(а):
Я говорил тебе сделать его в компоненте, а не применять его. Оно же не реализовано




Для начала мне надо понять, как оно вообще работает, я ведь минут десять сидел и разбирался как работает этот компонент на уровне пользователя (то есть в конструкциях псевдокода), а уж в коде так вообще ужас.
карма: 10
0
Ответов: 16884
Рейтинг: 1237
#95: 2011-07-28 20:10:37 ЛС | профиль | цитата
Assasin писал(а):
а уж в коде так вообще ужас.
Assasin, писать комментарии к каждой строчке кода - дурной тон.

Ты ему тоже следуешь - открывал твои компоненты
Assasin писал(а):
а уж в коде так вообще ужас

карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 4690
Рейтинг: 425
#96: 2011-07-28 20:58:13 ЛС | профиль | цитата
Tad писал(а):
Assasin, писать комментарии к каждой строчке кода - дурной тон.

Зачем к каждой, только к определениям функций! Но уже поздно, я разобрал и у себя прокомментировал


#pas
if i <> 0 then
begin
//...
end
else
begin
startbl := endbl;
endbl := '';
end;

if endbl = '' then
begin
endbl := startbl;
//...

Мда, весьма оригинально копировать туда-сюда строки Когда можно было бы без дополнительной проверки и без переносов:
#pas
i := PosABM('{**x}', endbl);
if i <> 0 then
begin
startbl := Copy(endbl, 1, i - 1);
Delete(endbl, 1, i + 4);
include := false;
end
else
begin
i := PosABM('{**i}', endbl);
if i <> 0 then
begin
startbl := Copy(endbl, 1, i - 1);
Delete(endbl, 1, i + 4);
end
else
begin
startbl := endbl;
endbl := '';
end;
include := true;
end;

А вообще, nesco, давай не будем засорять форум и поговорим в руме (если успеешь зайти до того, как я выйду).
------------ Дoбавленo в 20.33:
А собственно говоря, а зачем оно так?
#pas
startbl := trim(startbl);
endbl := trim(endbl);
------------ Дoбавленo в 20.58:
А вот и решение для работающих пробелов, правда оно хитрое получилось Заменить функцию Trim в файле hiMultiBlockFind.pas на эту:
#pas
function Trim(Str: string): string;
var
L: integer;
begin
Result := Str;
L := Length(Result);
if Result[L] <> '\' then
while (L > 0) and (Result[L] <= ' ') do Dec(L)
else Dec(L);
SetLength(Result, L);
L := 1;
if Result[L] <> '\' then
while (L <= Length(Result)) and (Str[L] <= ' ') do Inc(L)
else Inc(L);
Delete(Result, 1, L - 1);
end;
и вот пример парсинга:
Add(MainForm,2953706,357,189)
{
link(onCreate,8248298:doMultiBlockFind,[])
}
Add(MultiBlockFind,8248298,406,203)
{
TagList="{**s}\ \{**x}\ \{**e}"
link(Text,15780894:Text,[])
link(onResult1,11062714:doMessage,[])
}
Add(Edit,15780894,406,154)
{
Left=405
Top=150
Text="data dt dat"
}
Add(Message,11062714,455,203)
{
}
карма: 10
0
Разработчик
Ответов: 25690
Рейтинг: 2088
#97: 2011-07-28 21:57:31 ЛС | профиль | цитата
Assasin, а почему вот так не работает



Add(MainForm,13988777,217,266)
{
link(onCreate,8248298:doMultiBlockFind,[])
}
Add(MultiBlockFind,8248298,266,280)
{
TagList="{**s}* {**x} {**e}"
link(Text,15780894:Text,[])
link(onResult1,11062714:doMessage,[])
}
Add(Edit,15780894,266,231)
{
Left=405
Top=150
Text="data* dt dat"
}
Add(Message,11062714,315,280)
{
}

карма: 20

0
Гость
Ответов: 17029
Рейтинг: 0
#98: 2011-07-28 23:33:34 правка | ЛС | профиль | цитата


Редактировалось 7 раз(а), последний 2021-06-21 04:08:51
карма: 0

0
Разработчик
Ответов: 25690
Рейтинг: 2088
#99: 2011-07-29 10:45:30 ЛС | профиль | цитата
5.gprs.mts.ru писал(а):
Я алгоритм поиска блока не менял, а он по идее должен обрабатывать любые startblock, endblock и тексты.

А вот не нравится ему твое экранирование, чего-то там не хватает
------------ Дoбавленo в 10.45:
nesco писал(а):
А вот не нравится ему твое экранирование, чего-то там не хватает

Понял чего не хватает -- правильного понимания экранирования пробелов, а именно: " " -- экранирование справа, " " -- экранирование слева, " " -- экранирование с обоих сторон, это когда используется только пробел
карма: 20

0
Разработчик
Ответов: 4690
Рейтинг: 425
#100: 2011-07-29 13:16:03 ЛС | профиль | цитата
Эх, с мобилы не заметил, что в маске присутствует звездочка перед слешем, так оно и не будет работать, т.к экранирование
Assasin писал(а):
хитрое получилось

Оно работает так (хотя ты уже наверняка разобрался в коде сам ):
1. Если в конце строки '\', значит удаляем этот символ и переходим к пункту 2, иначе удаляем все пробелы в конце строки и переходим к пункту 2.
2. Если в начале строки '\', значит удаляем этот символ, иначе удаляем все пробелы в начале строки.
карма: 10
0
Разработчик
Ответов: 25690
Рейтинг: 2088
#101: 2011-07-29 13:36:44 ЛС | профиль | цитата
Assasin писал(а):
Оно работает так (хотя ты уже наверняка разобрался в коде сам ):
1. Если в конце строки '\', значит удаляем этот символ и переходим к пункту 2, иначе удаляем все пробелы в конце строки и переходим к пункту 2.
2. Если в начале строки '\', значит удаляем этот символ, иначе удаляем все пробелы в начале строки

Мля... Ты хоть мой предыдущий пост читал
nesco писал(а):
Понял чего не хватает -- правильного понимания экранирования пробелов, а именно: " \" -- экранирование справа, "\ " -- экранирование слева, "\ \" -- экранирование с обоих сторон, это когда используется только пробел

карма: 20

0
Разработчик
Ответов: 4690
Рейтинг: 425
#102: 2011-07-29 13:44:19 ЛС | профиль | цитата
nesco писал(а):
Мля... Ты хоть мой предыдущий пост читал

Читал, читал, что ты кипятишься-то? Я так и не понял, какого такого правильного не хватает? Судя по твоему посту, правильным ты считаешь именно то, какое я и сделал.
карма: 10
0
Разработчик
Ответов: 25690
Рейтинг: 2088
#103: 2011-07-29 13:53:01 ЛС | профиль | цитата
Assasin писал(а):
Я так и не понял, какого такого правильного не хватает?

У тебя кондишин не работает, да
nesco писал(а):
правильного понимания экранирования пробелов, а именно

понимания того, как ты сделал
------------ Дoбавленo в 13.53:
Assasin писал(а):
Судя по твоему посту, правильным ты считаешь именно то, какое я и сделал

Я не считаю, я проверил и вроде против не выступал. А постом я описал то, что проверил. Ты же не удосужлся описать, как оно должно работать, пришлось ставить эксперимент и описывать самому
карма: 20

0
Разработчик
Ответов: 4690
Рейтинг: 425
#104: 2011-07-29 14:00:04 ЛС | профиль | цитата
nesco писал(а):
правильного понимания

слово "правильного" я как-то не заметил
nesco писал(а):
Я не считаю, я проверил и вроде против не выступал.

А как ты предлагаешь? Вообще можно попробовать переписать компонент под эдакий компилятор: маска парсится при старте программы, создается дерево вызовов, и при воздействии на точку doMultiBlockFind просто вызывается поочередно стартовая функция выполнения поиска каждого блока
карма: 10
0
Разработчик
Ответов: 25690
Рейтинг: 2088
#105: 2011-07-29 14:12:32 ЛС | профиль | цитата
Assasin писал(а):
А как ты предлагаешь?

Я ничего не предлагал, я согласился с твоим предложением
Assasin писал(а):
Вообще можно попробовать переписать компонент под эдакий компилятор: маска парсится при старте программы, создается дерево вызовов, и при воздействии на точку doMultiBlockFind просто вызывается поочередно стартовая функция выполнения поиска каждого блока

Ты хочешь заняться, а может не стоит, работает и пусть себе работает. Соверешенству предела нет
карма: 20

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)