runewalsh писал(а):Хоспаде, да какая у тебя там сложная логика?
Да уж сложнее чем у тебя.
runewalsh писал(а): На goto пишут те, кто ничего другого не знает, и получается чушь.
- Код: Выделить всё
FUNCTION CITALNIK(IMJA_FAILA_SOHRANKI5: ANSISTRING;VAR S5: ARRAY OF STRING; VAR Z5: ARRAY OF ANSISTRING;LIMIT: LONGINT): BOOLEAN;
VAR
DLINA_A2: LONGINT=1000;
QQ3,ADRESA3: ARRAY OF BYTE;
ADRESA2: ARRAY OF LONGINT;
M2,E2,C2,I2,R2,Y2,T2: LONGINT;
KOLP: LONGINT;
X64: INT64;
{$IFNDEF LINUX}
Z64: SYSUTILS.THANDLE;
{$ENDIF}
{$IFDEF LINUX}
Z64: INT64;
{$ENDIF LINUX}
LABEL
1,2,5, 99,100,101;
BEGIN
CITALNIK:=FALSE;
{$IFDEF WINDOWS}
IMJA_FAILA_SOHRANKI5:=PUTI_MAZDAJA(IMJA_FAILA_SOHRANKI5);
{$ENDIF WINDOWS}
IF PADLOFAIL(IMJA_FAILA_SOHRANKI5)=FALSE THEN GOTO 101;
KOLP:=LENGTH(S5);
Z64:=SYSUTILS.FILEOPEN(IMJA_FAILA_SOHRANKI5, fmOpenRead);
IF Z64=VINDOFAILOBAG THEN GOTO 100; //КОНСТАНТА ЕСТЬ ДЛЯ ЛИНУКСА, ВИН32 И ВИН64
X64:=SYSUTILS.FILESEEK(Z64,0,2);
SYSUTILS.FILESEEK(Z64,0,0);
IF X64>LIMIT THEN X64:=LIMIT;
IF X64<1 THEN GOTO 99;
SETLENGTH(QQ3,X64+200);
FOR M2:=X64 TO X64+200-1 DO QQ3[M2]:=0;
M2:=X64;
E2:=0;
SYSUTILS.FILEREAD(Z64,QQ3[1],X64);
SETLENGTH(ADRESA2,DLINA_A2+2);
SETLENGTH(ADRESA3,DLINA_A2+2);
ADRESA2[0]:=1;
ADRESA2[1]:=X64;
ADRESA3[1]:=0;
C2:=0;
FOR E2:=1 TO X64 DO BEGIN
IF QQ3[E2] IN [10,13]=FALSE THEN GOTO 5;
IF QQ3[E2+1]<>36 THEN GOTO 5;
INC(C2);
IF C2>DLINA_A2 THEN BEGIN
DLINA_A2:=DLINA_A2+2000;
SETLENGTH(ADRESA2,DLINA_A2+2);
SETLENGTH(ADRESA3,DLINA_A2+2);
END;
ADRESA2[0]:=C2;
ADRESA2[C2]:=E2;
ADRESA3[C2]:=0;
5:
END;
FOR I2:=0 TO KOLP-1 DO BEGIN
Z5[I2]:='';
FOR C2:=1 TO ADRESA2[0] DO BEGIN
IF ADRESA3[C2]=1 THEN GOTO 2;
E2:=ADRESA2[C2];
FOR R2:=1 TO LENGTH(S5[I2]) DO BEGIN
IF QQ3[E2+R2+1]<>ORD(S5[I2,R2]) THEN GOTO 2;
IF QQ3[E2+R2+1]=39 THEN BEGIN
Y2:=1;
ADRESA3[C2]:=1;
FOR T2:=R2+1 TO X64 DO BEGIN
IF QQ3[E2+T2+1] IN [10,13] THEN GOTO 1;
Z5[I2]:=Z5[I2]+CHR(QQ3[E2+T2+1]);
IF QQ3[E2+T2+1]=39 THEN GOTO 1;
INC(Y2);
END;
GOTO 1;
END;
END;
2:
END;
1:
END;
99:
CITALNIK:=TRUE;
100:
SYSUTILS.FILECLOSE(Z64);
101:
END;
Ну и где тут чушь? Даже баг sysutils учтён. Грузит данные из файла прекрасно, классы тут не нужны от слова совсем. Лепить кучу классов чтобы не использовать гото в цикле это маразм.
Давай сюда пример, где с goto проще, чем с таким «паттерном „состояние“» (или как это называется).
Когда все эти три комнаты существуют одновременно, в каждой из них кипит жизнь, но рисуется на экране лишь одна. Просто запустить поле класса в таком случае недостаточно, необходимо ещё наладить асинхронную обработку самогенерирующихся событий. Ты описал мыльное кино уровня Диззи, только с более лучшей графикой.