Forum Główne > ISDR - Tematy ogólne
Dodanie innych wersji tekstu
Paweł:
Nie ma pliku telefonogramów, jest funkcja która je generuje na podstawie podanego rodzaju telefonogramu, numeru, godziny, toru i innych parametrów:
--- Kod: ---//wzory telefonogramow
function TForm1.WzorTel(wzor: string; posterunek,kto,numer,tor,godz,szlod,szldo,powod,opozn,numerbd,przez,semaf,km: string; nazmk: boolean): string;
var r,t: string; przed,po: boolean; rozn: single;
begin
r:='';
przed:=false;
po:=true;
if strtotimedef(godz,-1)=-1 then godz:='' else
begin
t:=timetostr(srk1.czas);
delete(t,6,3);
rozn:=strtotime(godz)-strtotime(t);
if rozn>0.5 then rozn:=rozn-1;
if rozn<-0.5 then rozn:=rozn+1;
przed:=rozn>0;
po:=rozn<0;
end;
if (pos('manewr',lowercase(numer))=1) and (length(numer)>6) and ((tor='') or (wzor='zmkp')) then
begin
if wzor='zmkp' then
begin
delete(numer,1,6);
numer:=inttostr(strtointdef(numer,-1));
if numer='-1' then numer:='';
end else
begin
tor:=numer;
delete(tor,1,6);
end;
end;
if (tor<>'') and (pos('lew',lowercase(tor))=0) and (pos('praw',lowercase(tor))=0) then
tor:='numer '+tor;
//slucham
if wzor='sluch' then
begin
if posterunek<>'' then r:=posterunek;
if kto<>'' then r:=r+', '+kto;
case random(3) of
0: if r='' then r:='Słucham.' else r:=r+', słucham.';
1: if r='' then r:='Proszę.' else r:=r+', proszę.';
2: if r='' then r:='Tak.' else r:=r+'.';
end;
end else
//przedstawienie sie
if wzor='przedst' then
begin
if posterunek<>'' then r:=posterunek;
if kto<>'' then r:=r+', '+kto;
r:=r+'.';
end else
//przyjalem
if wzor='ok' then
begin
case random(2) of
0: r:='Przyjąłem';
1: r:='Zrozumiałem';
end;
if length(numer)>0 then
if numer[1]=',' then delete(numer,1,1);
if length(numer)>0 then
if numer[length(numer)]=',' then delete(numer,length(numer),1);
numer:=StringReplace(numer,',',', ',[rfReplaceAll]);
numer:=StringReplace(numer,' ',' ',[rfReplaceAll]);
if numer<>'' then
r:=r+', '+numer;
r:=r+'.';
end else
//zadanie pozwolenia
if wzor='zpoz' then
begin
r:='Czy droga dla pociągu '+numer;
if tor<>'' then
begin
r:=r+' po';
if nazmk then r:=r+' zamkniętym';
r:=r+' torze '+tor;
end else
if nazmk then r:=r+' po torze zamkniętym';
r:=r+' jest wolna?';
end else
//zadanie pozwolenia - jazda do km
if wzor='zpozkm' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Czy droga dla manewrów na';
if nazmk then r:=r+' zamknięty';
r:=r+' tor szlakowy';
if tor<>'' then r:=r+' '+tor;
if km<>'' then r:=r+' do '+km;
r:=r+' jest wolna?';
end else
begin
if km='' then km:='kilometra i z powrotem';
r:='Czy droga dla pociągu '+numer;
if tor<>'' then
begin
r:=r+' po';
if nazmk then r:=r+' zamkniętym';
r:=r+' torze '+tor;
end else
if nazmk then r:=r+' po torze zamkniętym';
r:=r+' do '+km+' jest wolna?';
end;
end else
//danie pozwolenia
if wzor='dpoz' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Dla manewrów na';
if nazmk then r:=r+' zamknięty';
r:=r+' tor szlakowy';
if tor<>'' then r:=r+' '+tor;
r:=r+' droga jest wolna.';
end else
r:='Dla pociągu '+numer+' droga jest wolna.';
end else
//czekac
if wzor='czekac' then
r:='Czekać.' else
//odjazd
if wzor='odj' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Manewr wyjechał na';
if nazmk then r:=r+' zamknięty';
r:=r+' tor szlakowy';
if tor<>'' then r:=r+' '+tor;
r:=r+'.';
end else
begin
r:='Pociąg '+numer;
if przed then r:=r+' odjedzie' else
if po then r:=r+' odjechał' else
r:=r+' odjeżdża';
if godz<>'' then r:=r+' o godzinie '+godz;
if tor<>'' then
begin
r:=r+' po';
if nazmk then r:=r+' zamkniętym';
r:=r+' torze '+tor;
end else
if nazmk then r:=r+' po torze zamkniętym';
if km<>'' then r:=r+' do '+km;
r:=r+'.';
end;
end else
//odjazd (wymuszone odjedzie)
if wzor='odje' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Manewr wyjedzie na';
if nazmk then r:=r+' zamknięty';
r:=r+' tor szlakowy';
if tor<>'' then r:=r+' '+tor;
r:=r+'.';
end else
begin
r:='Pociąg '+numer;
r:=r+' odjedzie';
if godz<>'' then r:=r+' o godzinie '+godz;
if tor<>'' then
begin
r:=r+' po';
if nazmk then r:=r+' zamkniętym';
r:=r+' torze '+tor;
end else
if nazmk then r:=r+' po torze zamkniętym';
if km<>'' then r:=r+' do '+km;
r:=r+'.';
end;
end else
//przyjazd
if wzor='przyj' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
if tor<>'' then r:='Manewry na tor szlakowy '+tor+' są ukończone i tor ten jest wolny.'
else r:='Manewry na tor szlakowy są ukończone i tor ten jest wolny.';
end else
begin
r:='Pociąg '+numer+' przyjechał';
if godz<>'' then r:=r+' o godzinie '+godz;
r:=r+'.';
end;
end else
//przejazd
if wzor='przej' then
begin
r:='Pociąg';
if numer<>'' then r:=r+' '+numer;
if przed then r:=r+' przejedzie' else
r:=r+' przejechał';
if przez<>'' then r:=r+' przez '+przez;
if godz<>'' then r:=r+' o '+godz;
r:=r+'.';
end else
//stoj
if wzor='stoj' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Zatrzymać manewry na tor szlakowy';
if tor<>'' then r:=r+' '+tor+'.' else r:=r+'.';
end else
r:='Stój pociąg '+numer+'.';
end else
//zatrzymany
if wzor='zatrz' then
begin
if pos('manewr',lowercase(numer))=1 then
begin
r:='Manewry na tor szlakowy';
if tor<>'' then r:=r+' '+tor+' zatrzymane.' else r:=r+' zatrzymane.';
end else
r:='Pociąg '+numer+' zatrzymany.';
end else
//wstrzymanie wyprawiania pociagow
if wzor='wwp' then
begin
r:='Nie wyprawiać pociągów';
if tor<>'' then r:=r+' po torze '+tor;
if powod<>'' then r:=r+' z powodu '+powod;
if godz<>'' then r:=r+' od '+godz;
r:=r+' aż do odwołania.';
end else
if wzor='owwp' then
begin
r:='Wstrzymanie wyprawienia pociągów';
if tor<>'' then r:=r+' po torze '+tor;
r:=r+' odwołuję';
if godz<>'' then r:=r+' o '+godz;
r:=r+'.';
end else
//wprowadzenie tzp
if wzor='wtzp' then
begin
if godz<>'' then r:='O '+godz+' wprowadzam telefoniczne zapowiadanie pociągów po torze szlakowym'
else r:='Wprowadzam telefoniczne zapowiadanie pociągów po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
if powod<>'' then r:=r+' z powodu '+powod;
r:=r+'.';
end else
//odwolanie tzp
if wzor='otzp' then
begin
if godz<>'' then r:='O '+godz+' odwołuję telefoniczne zapowiadanie pociągów po torze szlakowym'
else r:='Odwołuję telefoniczne zapowiadanie pociągów po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+'.';
end else
//wprowadzenie ruchu dwukierunkowego przy drugim torze zamknietym
if wzor='wr2k1' then
begin
if (szlod<>'') and (szldo<>'') then
r:='Od '+szlod+' do '+szldo+' wprowadzam ruch jednotorowy dwukierunkowy po torze szlakowym'
else r:='Wprowadzam ruch jednotorowy dwukierunkowy po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
if (numer<>'') and (godz<>'') then r:=r+', po którym ostatni pociąg '+numer+' odjechał o '+godz;
r:=r+'.';
end else
//wprowadzenie ruchu dwukierunkowego przy drugim torze otwartym
if wzor='wr2k2' then
begin
r:='Przy czynnych obu torach wprowadzam';
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+' ruch dwukierunkowy po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
if (numer<>'') and (godz<>'') then r:=r+', po którym ostatni pociąg '+numer+' odjechał o '+godz;
r:=r+'.';
end else
//odwolanie ruchu dwukierunkowego
if wzor='or2k' then
begin
r:='Przywracam ruch dwutorowy';
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
if tor<>'' then r:=r+' po torach szlakowych '+tor;
if godz<>'' then r:=r+' o '+godz;
r:=r+'.';
end else
//polecenie wprowadzenia ruchu dwukierunkowego przy drugim torze zamknietym
if wzor='pwr2k1' then
begin
r:='Wprowadzić ruch jednotorowy dwukierunkowy';
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+' po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
r:=r+'.';
end else
//polecenie wprowadzenia ruchu dwukierunkowego przy drugim torze otwartym
if wzor='pwr2k2' then
begin
r:='Przy czynnych obu torach wprowadzić ruch dwukierunkowy';
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+' po torze szlakowym';
if tor<>'' then r:=r+' '+tor;
r:=r+'.';
end else
//polecenie odwolania ruchu dwukierunkowego
if wzor='por2k' then
begin
r:='Przywrócić ruch dwutorowy';
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
if tor<>'' then r:=r+' po torach szlakowych '+tor;
r:=r+'.';
end else
//zamkniecie toru
if wzor='zmk' then
begin
r:='Tor szlakowy';
if tor<>'' then r:=r+' '+tor;
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+' zamknięty';
if godz<>'' then r:=r+' od '+godz;
if powod<>'' then r:=r+' z powodu '+powod;
r:=r+'.';
end else
//otwarcie toru
if wzor='ozmk' then
begin
r:='Tor szlakowy';
if tor<>'' then r:=r+' '+tor;
if (szlod<>'') and (szldo<>'') then r:=r+' od '+szlod+' do '+szldo;
r:=r+' otwarty';
if godz<>'' then r:=r+' o '+godz;
r:=r+'.';
end else
//zamkniecie przejazdu
if wzor='zmkp' then
begin
r:='Zamknij przejazd';
if strtointdef(numer,0)>0 then
begin
if strtoint(numer)=1 then
r:=r+' na 1 jazdę manewrową'
else if numer[length(numer)] in ['2','3','4'] then
r:=r+' na '+numer+' jazdy manewrowe'
else r:=r+' na '+numer+' jazd manewrowych';
end;
r:=r+'.';
end else
//otwarcie przejazdu
if wzor='otwp' then
r:='Otwórz przejazd.' else
//nie przejechal
if wzor='nieprzej' then
r:='Pociąg '+numer+' nie przejechał.' else
//informacja o wjezdzie pociagu dla posterunku skp/droznika
if wzor='wjedzie' then
begin
if pos('manewr',lowercase(numer))=1 then
r:='Manewr' else
begin
r:='Pociąg';
if numer<>'' then r:=r+' '+numer;
end;
if przed then r:=r+' wjedzie' else r:=r+' wjeżdża';
if godz<>'' then r:=r+' o '+godz;
if tor<>'' then r:=r+' po torze '+tor;
r:=r+'.';
end else
//wprowadzenie zglaszania konca pociagu
if wzor='wskp' then
begin
r:='Wprowadzam zgłaszanie sygnałów końca pociągu';
if godz<>'' then r:=r+' od '+godz;
if tor<>'' then r:=r+' na torze szlakowym '+tor;
if powod<>'' then r:=r+' z powodu '+powod;
r:=r+'.';
end else
//odwolanie zglaszania konca pociagu
if wzor='oskp' then
begin
r:='Odwołuję zgłaszanie sygnałów końca pociągu';
if godz<>'' then r:=r+' od '+godz;
if tor<>'' then r:=r+' na torze szlakowym '+tor;
r:=r+'.';
end else
//telefonogramy uzywane zasadniczo tylko przez ai
if wzor='jakinr' then r:='Jaki numer?' else
if wzor='coz' then r:='Co z pociągiem '+numer+'?' else
if wzor='jakitor' then r:='Jaki tor?' else
if wzor='cowyj' then r:='Co wyjechało?' else
if wzor='opozn' then r:=numer+' opóźniony około '+opozn+' minut.' else
if wzor='stojbd' then r:='Stój '+numer+', brak dojścia '+numerbd+'.' else
if wzor='nmwypbd' then r:='Nie mogę wyprawić '+numer+', brak dojścia '+numerbd+'.' else
if wzor='zblok' then
begin
r:='Zablokuj blok początkowy';
//if tor<>'' then r:=r+' na torze '+tor;
r:=r+'.';
end else
if wzor='nmpwyj' then r:='Nie mogę wyprawić pociągu '+numer+'.' else
if wzor='przyjzskp' then r:='Pociąg '+numer+' przyjechał z sygnałem końca pociągu.' else
if wzor='przyjbskp' then r:='Pociąg '+numer+' przyjechał bez sygnału końca pociągu.' else
if wzor='zmkty' then r:='Przejazd zamknięty.' else
if wzor='awrrgsd' then r:='Usterka urządzeń na przejeździe.' else
if wzor='awrsem' then r:='Usterka semafora odstępowego '+semaf+'.' else
if wzor='awrbl' then
begin
if tor='' then
r:='Blokada liniowa działa nieprawidłowo.'
else
r:='Blokada liniowa w torze '+tor+' działa nieprawidłowo.';
end else
if wzor='wogrssp' then
begin
if tor<>'' then
begin
r:='Wprowadzam ograniczenie prędkości do 20 km/h w kilometrze '+km+' na torze '+tor+' z powodu usterki urządzeń SSP.';
end else
r:='Wprowadzam ograniczenie prędkości do 20 km/h w kilometrze '+km+' z powodu usterki SSP.';
end else
if wzor='oogrssp' then
begin
if tor<>'' then
begin
r:='Odwołuję ograniczenie prędkości w kilometrze '+km+' na torze '+tor+'.';
end else
r:='Odwołuję ograniczenie prędkości w kilometrze '+km+'.';
end else
raise Exception.Create('Błąd przy wywołaniu WzorTel: nieprawidłowy wzór "'+wzor+'". Proszę o kontakt i opis okoliczności wystąpienia błędu.');
result:=r;
end;
--- Koniec kodu ---
jageer:
Mały OT, patrząc na kod źródłowy telefonogramów to, aż tak źle nie ma ;) jakiś mega komplikacji.
Paweł:
Owszem, tu akurat nie ma niczego skomplikowanego, gorzej jest z kodem AI - momentami ja sam już nie wiem co się tam dzieje :P
Nawigacja
Idź do wersji pełnej