Forum Główne > ISDR - Tematy ogólne

Dodanie innych wersji tekstu

<< < (2/2)

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

[0] Indeks wiadomości

[*] Poprzednia strona

Idź do wersji pełnej