Вверх ↑
Этот топик читают: Гость
Ответов: 1720
Рейтинг: 604
#16: 2018-11-26 22:55:29 ЛС | профиль | цитата
Aroyl писал(а):
значение параметра в компоненте, заданное по-умолчанию (в данном случае пустая строка для Section) вызывало бы ошибку (в данном случае несрабатывание метода doSectionNames)

nesco, поддержу Aroyl не правильно работает.
карма: 7

0
Ответов: 9804
Рейтинг: 340
#17: 2018-11-26 22:57:31 ЛС | профиль | цитата
nesco писал(а):
функция Open вернет False

Циркачи, блин....
Здесь играть, здесь не играть, здесь рыбу заворачивали.
Так все-таки, это функция, или процедура
nesco писал(а):


procedure THIini.Open;
begin
Result := false;
Ini := OpenIniFile(ReadFileName(ReadString(_Data,_data_FileName,_prop_FileName)));
Ini.Section := ReadString(_Data,_data_Section,_prop_Section);
if Ini.Section = '' then exit;
// ifmRead - флаг для чтения; ifmWrite - флаг для записи
Ini.Mode := ifm;
Result := true;
end;


--- Добавлено в 2018-11-26 23:01:12

sla8a писал(а):
nesco, поддержу Aroyl не правильно работает

Тоже поддержу
Не надо проверять результат Open в doSectionNames

Редактировалось 1 раз(а), последний 2018-11-26 23:01:12
карма: 8

0
Ответов: 1720
Рейтинг: 604
#18: 2018-11-26 23:05:21 ЛС | профиль | цитата
Предложу функцию Open изменить:
function Open(var _Data:TData;ifm: TIniFileMode; SectionRead: boolean): boolean;
....
....
function THIini.Open;
begin
Result := false;
Ini := OpenIniFile(ReadFileName(ReadString(_Data,_data_FileName,_prop_FileName)));
if SectionRead then
begin
Ini.Section := ReadString(_Data,_data_Section,_prop_Section);
if Ini.Section = '' then exit;
edn;
// ifmRead - флаг для чтения; ifmWrite - флаг для записи
Ini.Mode := ifm;
Result := true;
end;
И внести изменения в вызовах, кому нужна секция и кому нет(Для doSectionNames):
   if not Open(_Data,ifmRead, false) then exit;

Редактировалось 2 раз(а), последний 2018-11-26 23:07:15
карма: 7

0
Разработчик
Ответов: 25352
Рейтинг: 2070
#19: 2018-11-26 23:05:44 ЛС | профиль | цитата
Galkov писал(а):
Так все-таки, это функция, или процедура

Вообще-то, это должна быть функция. Но вот это уже не я писал, так было до меня, а я это и не заметил, увы. Пока ты мне глаза не открыл

--- Добавлено в 2018-11-26 23:09:48

sla8a писал(а):
Функцию Open изменить

Отложим до завтра

--- Добавлено в 2018-11-26 23:13:24

sla8a, в описании дефолтное значение SectionRead будем присваивать или как? Я бы присвоил True, чтобы остальной код не править

Редактировалось 3 раз(а), последний 2018-11-26 23:13:24
карма: 19

0
Ответов: 9804
Рейтинг: 340
#20: 2018-11-26 23:16:25 ЛС | профиль | цитата
sla8a писал(а):
Предложу функцию Open изменить

Я конечно прошу прощения за свой французский....

Но не напоминает ли вам все это легкую степень шизофрении ???
Результат функции Open -- не более чем равенство section пустой строке.
Не слишком ли много кругов с бубном из-за такой ерунды.
Сначала процедуру превращают в функцию, потом добавляют ей еще один параметр....
Бред ведь какой-то.
карма: 8

0
Разработчик
Ответов: 25352
Рейтинг: 2070
#21: 2018-11-26 23:17:36 ЛС | профиль | цитата
Galkov писал(а):
Бред ведь какой-то

Сэр, Ваши предложения? Ведь пустая секция может вылезти не в одном месте, может пусть это все же будет функцией?

Редактировалось 1 раз(а), последний 2018-11-26 23:20:16
карма: 19

0
Ответов: 1720
Рейтинг: 604
#22: 2018-11-26 23:21:15 ЛС | профиль | цитата
nesco писал(а):
Я бы присвоил True
Соглашусь, меньше править придется.
карма: 7

0
Разработчик
Ответов: 25352
Рейтинг: 2070
#23: 2018-11-26 23:25:07 ЛС | профиль | цитата
А может вообще не трогать Open (за исключением перевода ее в функцию)? Просто в doSectionNames добавить свой собственный Open
карма: 19

0
Ответов: 1720
Рейтинг: 604
#24: 2018-11-26 23:28:12 ЛС | профиль | цитата
Galkov,
nesco писал(а):
Ваши предложения?

карма: 7

0
Ответов: 9804
Рейтинг: 340
#25: 2018-11-26 23:32:56 ЛС | профиль | цитата
nesco писал(а):
sla8a, в описании дефолтное значение SectionRead будем присваивать или как? Я бы присвоил True, чтобы остальной код не править

Между прочим, я предлагал не править ничего.
Лишь только:
Galkov писал(а):
Не надо проверять результат Open в doSectionNames

Не думал, что требуются разъяснения:
procedure THIini._work_doSectionNames;
var StrList:PStrList;
I:integer;
begin
Open(_Data,ifmRead); // не хочешь проверять, ТАК И НЕ ПРОВЕРЯЙ
//if not Open(_Data,ifmRead) then exit;
StrList := NewStrList;
Ini.GetSectionNames(strList);
Ini.Free;
TRY
for i := 0 to strList.Count-1 do
_hi_OnEvent(_event_onSectionNames,strList.Items[i]);
FINALLY
strList.free;
END;
end;

--- Добавлено в 2018-11-26 23:37:55

А вот установку mode в Open поднял бы выше. Не годится оставлять параметр без инициализации
Как-то так:
function THIini.Open;
begin
Ini := OpenIniFile(ReadFileName(ReadString(_Data,_data_FileName,_prop_FileName)));
Ini.Section := ReadString(_Data,_data_Section,_prop_Section);
Ini.Mode := ifm;
Result := Ini.Section <> '';
end;

Редактировалось 2 раз(а), последний 2018-11-27 00:06:58
карма: 8

1
Голосовали:sla8a
Разработчик
Ответов: 25352
Рейтинг: 2070
#26: 2018-11-26 23:42:41 ЛС | профиль | цитата
Galkov писал(а):
Между прочим, я предлагал не править ничего.

Во, вижу конструктивный подход Завтра буду править по твоим рекомендациям.

Редактировалось 1 раз(а), последний 2018-11-26 23:43:07
карма: 19

0
Ответов: 1720
Рейтинг: 604
#27: 2018-11-26 23:51:14 ЛС | профиль | цитата
А TRY, FINALLY, END в doSectionNames есть необходимость?

Редактировалось 1 раз(а), последний 2018-11-26 23:51:45
карма: 7

0
Ответов: 9804
Рейтинг: 340
#28: 2018-11-26 23:54:09 ЛС | профиль | цитата
Это любимая фишка nesco
Гарантированное Free, даже если где-то далеко (по _hi_OnEvent) произойдет исключение.

Как бы... Хотя есть вопросы к этому делу.

Редактировалось 2 раз(а), последний 2018-11-26 23:58:52
карма: 8

0
Ответов: 1720
Рейтинг: 604
#29: 2018-11-26 23:57:39 ЛС | профиль | цитата
Ну раз так, то сделать Free после Ini.GetSectionNames(strList) и удалить TRY, FINALLY, END.
карма: 7

0
Разработчик
Ответов: 25352
Рейтинг: 2070
#30: 2018-11-27 00:01:33 ЛС | профиль | цитата
sla8a писал(а):
А TRY, FINALLY, END в doSectionNames есть необходимость?

Была, когда было условие с выходом, а теперь и нафиг не надо, КМК.

Редактировалось 1 раз(а), последний 2018-11-27 00:05:56
карма: 19

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