Маленькая ошибочка - при компиляции пишет "';' not allowed before 'ELSE'"

Function NumberOfWeek(N: Integer): Integer;
Const RegPath = 'Software\Sheduler';
Var reg: TRegistry;
begin
reg:= TRegistry.Create;
 Try
 if N = 0
 then
 if reg.KeyExists(RegPath)
 then Result:= reg.ReadInteger(RegPath)
 else Result:= 0;
 else //ВОТ ТУТ !!!
 if reg.KeyExists(RegPath)
 then reg.WriteInteger(RegPath,N)
 else
 begin
 reg.CreateKey(RegPath);
 reg.WriteInteger(RegPath,N);
 end;
 Finally
 reg.Free;
 end;
end;
пишет "';' not allowed before 'ELSE'", никак не врублюсь где я там не поставил точку с запятой, вроде все правильно
7 ответов

воспользуйтесь переводчиком, тут совсем другой смысл


if N = 0
 then
 if reg.KeyExists(RegPath)
 then Result:= reg.ReadInteger(RegPath)
 else Result:= 0<font color="Red">;</font> //красное убрать
 else //ВОТ ТУТ !!!


Аватар, но тогда два ифа сольются ведь...п.с. а может и нет хз...


что бы точно не сливались. используйте скобки в виде конструкции begin end,


что бы точно не сливались. используйте скобки в виде конструкции begin end,
Вот это золотые слова. Присоединяюсь. вместо того, чтобы надеяться на компилятор, как он разрулит ситуацию с несколькими вложенными if'ми и else, если возникают малейшие неоднозначности (вот лично для меня - неоднозначности, не для компилятора), я всегда обрамляю код в операторные скобки. например, в вашем случае:
reg := TRegistry.Create;
 try
 if N = 0
 then begin
 if reg.KeyExists(RegPath)
 then Result := reg.ReadInteger(RegPath)
 else Result := 0;
 end
 else begin
 if reg.KeyExists(RegPath)
 then reg.WriteInteger(RegPath, N)
 else
 begin
 reg.CreateKey(RegPath);
 reg.WriteInteger(RegPath, N);
 end;
 end;
 finally
 reg.Free;
 end;


А ещё так можно:
function NumberOfWeek(N: Integer): Integer;
const
 RegPath = 'Software\Sheduler';
var
 reg: TRegistry;
begin
reg := TRegistry.Create;
try
 if N = 0 then
 (if reg.KeyExists(RegPath) then Result := reg.ReadInteger(RegPath)
 else Result := 0)
 else
 (if reg.KeyExists(RegPath) then reg.WriteInteger(RegPath, N)
 else begin
 reg.CreateKey(RegPath);
 reg.WriteInteger(RegPath, N);
 end);
finally
 reg.Free;
end;
end;


Kix.IV, красиво! я про такую возможность не знал! запомню!NewLamer&Programer, обратите внимание, код у Вас БАЖНЫЙ!!! если N не равно нулю, функция вернёт МУСОР (Вы ничего не возвращаете == не присваиваете переменной Result )