runewalsh писал(а):Покажи пример, именно рабочий код, который, используя функцию CITALNIK, фильтрует из файла
- Код: Выделить всё
$name='werewolf'
$hit_points='500'
$weapon='claws'
значения name и weapon.
Зачем делать именно наме и веапон, если есть готовый тестовый полигон novellotyk-1.0.2 с остросюжетной демкой, которую мало кто может пройти без подсказок, или не расстроиться в случае проигрыша - "догони меня кирпич". https://sourceforge.net/projects/novellotyk/files/1.0.0/ В файле dvizok.pp содержится процедура использующая читальник. Отложите в сторону печеньки, чай и сухарики и читайте код:
- Код: Выделить всё
PROCEDURE ZAGRUZKA_SOHRANKI;
CONST
KOLP=100;
LIMIT=10000000;
VAR
S5: ARRAY OF SHORTSTRING;
Z5: ARRAY OF ANSISTRING;
Q3: BYTE;
Q2,W2,E2,R2,T2,Y2: LONGINT;
Q64,W64: INT64;
Q364:M_3_64;
LABEL
100;
BEGIN
SETLENGTH (S5,KOLP);
SETLENGTH (Z5,KOLP);
WRITELN('Читается файл '+IMJA_FAILA_SOHRANKI);
S5[1]:='NOMER_SCENY='+#39;
S5[2]:='slucainyi_identifikator_igry='+#39;
S5[3]:='RAZRESENIE='+#39;
S5[4]:='VERTIKALJNAJA_SINHRINIZACIJA='+#39;
//S5[5]:='ZAPUSTITJ_IGRU3='+#39; //Не будем это сохранять и загружать,
//S5[6]:='PRODOLZITJ_IGRU3='+#39; //иначе игра может запуститься сама!
S5[7]:='SUNDUK3='+#39;
S5[8]:='TYK_PO_MENJUHE3='+#39;
S5[9]:='TAIMER64='+#39;
S5[10]:='TAIMER_PR64='+#39;
S5[11]:='TAIMER_SEK64='+#39;
S5[12]:='TAIMER_SEK_PR64='+#39;
S5[13]:='TYK_PO_PULJTU3='+#39;
S5[14]:='TYK_PO_HELPU3='+#39;
S5[15]:='GROMKOSTJ1='+#39;
S5[16]:='NACINALJNIK64='+#39;
S5[17]:='POD_MENJUHOI='+#39;
S5[18]:='MASSIV='+#39;
S5[19]:='RAMKI='+#39;
S5[20]:='ALTSRIFT='+#39;
S5[21]:='PEKUNDY_SCAS='+#39;
S5[22]:='PEKUNDY_TOGDA='+#39;
S5[23]:='ODEVALJNIK3='+#39;
S5[24]:='JACEIKA='+#39;
S5[25]:='JACEIKA_HVATALJNIKA='+#39;
S5[26]:='JACEIKA_HVATALJNIKA_PR='+#39;
S5[27]:='TEKUSCAJA_VKLADKA3='+#39;
S5[28]:='AKTIVNAJA_JACEIKA='+#39;
S5[29]:='GROMKOSTJ_M1='+#39;
S5[30]:='AKTIVNAJA_PINKTOGRAMMA='+#39;
S5[31]:='RAZMER_TEKSTUR='+#39;
IF CITALNIK(IMJA_FAILA_SOHRANKI,S5,Z5,LIMIT)=FALSE THEN BEGIN
WRITELN('Не удалось прочитать файл '+IMJA_FAILA_SOHRANKI);
GOTO 100;
END;
IF Z_L_2(Z5[1],1,Q364)>1 THEN NOMER_SCENY:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[2],2,Q364)>1 THEN slucainyi_identifikator_igry:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[3],3,Q364)>1 THEN RAZRESENIE:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[4],4,Q364)>1 THEN VERTIKALJNAJA_SINHRINIZACIJA:=BOLATRUI(Z5[Q364[3]]);
//IF Z_L_2(Z5[5],5,Q364)>1 THEN ZAPUSTITJ_IGRU3:=F_VAL(Z5[Q364[3]]); //Не будем это сохранять и загружать,
//IF Z_L_2(Z5[6],6,Q364)>1 THEN PRODOLZITJ_IGRU3:=F_VAL(Z5[Q364[3]]); //иначе игра может запуститься сама!
IF Z_L_2(Z5[7],7,Q364)>1 THEN SUNDUK3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[8],8,Q364)>1 THEN TYK_PO_MENJUHE3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[9],9,Q364)>1 THEN TAIMER64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[10],10,Q364)>1 THEN TAIMER_PR64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[11],11,Q364)>1 THEN TAIMER_SEK64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[12],12,Q364)>1 THEN TAIMER_SEK_PR64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[13],13,Q364)>1 THEN TYK_PO_PULJTU3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[14],14,Q364)>1 THEN TYK_PO_HELPU3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[15],15,Q364)>1 THEN GROMKOSTJ1:=F_VAL_V(Z5[Q364[3]]);
IF Z_L_2(Z5[16],16,Q364)>1 THEN NACINALJNIK64:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[17],17,Q364)>1 THEN BEGIN //ВОТ ТАК ЗАГРУЖАЮТСЯ РАЗЛИЧНЫЕ МАССИВЫ И СТРУКТУРЫ ДАННЫХ, В ТОМ ЖЕ ПОРЯДКЕ ЧТО И СОХРАНЯЛИСЬ
POD_MENJUHOI.KOLVO_KVADRATOSHEM3:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.TEKUSCAJA_KVADRATOSHEMA:=Z_VAL_2(Z5[Q364[3]],Q364);
FOR Q2:=1 TO 17 DO BEGIN
W2:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.STROKA17[Q2]:='';
IF W2>0 THEN FOR E2:=1 TO W2 DO
POD_MENJUHOI.STROKA17[Q2]:=POD_MENJUHOI.STROKA17[Q2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
END;
SETLENGTH(POD_MENJUHOI.KVADRATY,POD_MENJUHOI.KOLVO_KVADRATOSHEM3+1); //МАССИВ "РЕЗИНОВЫВЙ",
// ПОЭТОМУ ПЕРЕД ЗАПИСЬЮ НУЖНО УСТАНОВИТЬ ЕГО ДЛИНУ
FOR Q2:=1 TO POD_MENJUHOI.KOLVO_KVADRATOSHEM3 DO BEGIN
POD_MENJUHOI.KVADRATY[Q2].KOLVO_KVADRATOV:=Z_VAL_2(Z5[Q364[3]],Q364);
W2:=POD_MENJUHOI.KVADRATY[Q2].KOLVO_KVADRATOV;
SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].X1,W2+1);
SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].Y1,W2+1);
SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].X2,W2+1);
SETLENGTH(POD_MENJUHOI.KVADRATY[Q2].Y2,W2+1);
IF W2>0 THEN BEGIN
FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].X1[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].Y1[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].X2[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
FOR E2:=1 TO W2 DO POD_MENJUHOI.KVADRATY[Q2].Y2[E2]:=Z_VAL_2(Z5[Q364[3]],Q364);
END;
END;
POD_MENJUHOI.FLAG1:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG2:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG3:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG4:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG5:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG6:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG7:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG8:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG9:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.FLAG10:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.CASY1:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.CASY2:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.CASY3:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.CASY4:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.TEKUSCII_KVADRAT:=Z_VAL_2(Z5[Q364[3]],Q364);
POD_MENJUHOI.PROSLYI_KVADRAT:=Z_VAL_2(Z5[Q364[3]],Q364);
END;
IF Z_L_2(Z5[18],18,Q364)>1 THEN BEGIN
W2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV,W2);
IF W2>0 THEN FOR Q2:=0 TO W2-1 DO BEGIN
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].Q3,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].W3,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].E3,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E3[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].Q2,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].W2,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].E2,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E2[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].Q64,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Q64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].W64,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].W64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].E64,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].E64[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].X1,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].X1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].Y1,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Y1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].Z1,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO MASSIV[Q2].Z1[R2]:=Z_VAL_2(Z5[Q364[3]],Q364);
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].A5,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO BEGIN
T2:=Z_VAL_2(Z5[Q364[3]],Q364);
MASSIV[Q2].A5[R2]:='';
IF T2>0 THEN FOR Y2:=1 TO T2 DO MASSIV[Q2].A5[R2]:=MASSIV[Q2].A5[R2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
END;
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
SETLENGTH(MASSIV[Q2].S5,E2);
IF E2>0 THEN FOR R2:=0 TO E2-1 DO BEGIN
T2:=Z_VAL_2(Z5[Q364[3]],Q364);
MASSIV[Q2].S5[R2]:='';
IF T2>0 THEN FOR Y2:=1 TO T2 DO MASSIV[Q2].S5[R2]:=MASSIV[Q2].S5[R2]+CHR(Z_VAL_2(Z5[Q364[3]],Q364));
END;
END;
END;
IF Z_L_2(Z5[19],19,Q364)>1 THEN RAMKI:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[20],20,Q364)>1 THEN ALTSRIFT:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[21],21,Q364)>1 THEN PEKUNDY_SCAS:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[22],22,Q364)>1 THEN PEKUNDY_TOGDA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[23],23,Q364)>1 THEN ODEVALJNIK3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[24],24,Q364)>1 THEN BEGIN
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[24],JACEIKA[R2],Q364);
END;
IF Z_L_2(Z5[25],25,Q364)>1 THEN BEGIN
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[25],JACEIKA_HVATALJNIKA[R2],Q364);
END;
IF Z_L_2(Z5[26],26,Q364)>1 THEN BEGIN
E2:=Z_VAL_2(Z5[Q364[3]],Q364);
IF E2>0 THEN FOR R2:=1 TO E2 DO KUKU2(Z5[26],JACEIKA_HVATALJNIKA_PR[R2],Q364);
END;
IF Z_L_2(Z5[27],27,Q364)>1 THEN TEKUSCAJA_VKLADKA3:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[28],28,Q364)>1 THEN AKTIVNAJA_JACEIKA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[29],29,Q364)>1 THEN GROMKOSTJ_M1:=F_VAL_V(Z5[Q364[3]]);
IF Z_L_2(Z5[30],30,Q364)>1 THEN AKTIVNAJA_PINKTOGRAMMA:=F_VAL(Z5[Q364[3]]);
IF Z_L_2(Z5[31],31,Q364)>1 THEN RAZMER_TEKSTUR:=F_VAL(Z5[Q364[3]]);
100:
ZAGRUZITJ_IGRU:=0;
END;