Mein erstes Programm: Gabriel Read Outs lesen

 

Das war bei der Lauda Air um die Buchungsstatistiken aus dem SITA Gabriel Reservierungssystem auszulesen und als Report fürs Management bereitzustellen. Das Programm hatte ich im August 1991 erstellt. Das war nach einer Schulung in Atlanta bei der SITA. Dort bekam ich von den SITA Leuten den Quellcode für die Interaktion mit der PC Emulationskarte.

Read Out des Fluginventars aus dem SITA Gabriel Reservierungssystem

Die Statistik aller Flüge wurde in Textdateien geladen und dann in eine Datenbank importiert (DBASE). Daraus wurden dann Zusammenfassungen und Statistiken fürs Management erstellt.

Ich hatte als einziger in der Lauda Air damals einen PC mit einer P1024C Emulationskarte (PEP Karte hieß das Ding) für den Zugang zum Gabriel Reservierungssystem. Auf diesem PC lief ein Job der jede Nacht um 4:00 oder 5:00 in der Früh gestartet wurde. Das war ein DOS PC mit einer sagenhaften 100MB Festplatte und eine RAM Extension damit ich über die 640k kam). Cronjobs gab es in DOS nicht. Dafür hatte ich so ein BIOS embedded Ding das den Rechner bootete und in der autoexec.bat war ein Aufruf des Programmes - pures Ghetto.

Das Streckennetz der Lauda Air war damals sehr klein: NG1/2 VIE/SYD/MEL, NG7/8 VIEBKK/HKG, NG11/12 VIEHKT und NG106/7/8/9 VIELGW. Also super kompakt.

Den Read-Out auslesen.

Das ist ein sogenannter Gabriel RO (Read Out). Das war die Darstellung des Fluginventars für einen Flug im Gabriel System. In diesem Fall NG8 am 11AUG 2 Tage vor Abflug.

NG008 SU11AUG HKGVIE 2 763 CD/YBMHQLGV VIE001
C LEG AV OPN MAX CAP T/B GRO GRS BLK LSS GT LT  PT AT CT SMT IND
C/D
  HKG AS  27  30  30   3   0   0   0      0  0   1  0  2   1
  BKK AS  24  30  30   6   0   0   0      0  0   1  0  2   1
Y/BMHQLGV
  HKG AS 176 213 213  37   0   0   0      0  0   1  0  2   1
  BKK AS 106 213 213 107   0   4   0      0  0   1  0  2   1
= HKG    203 243 243  40       0   0
= BKK    130 243 243 113       4   0
SEG    CL BKD GRS BLK W/L LSS LT NOTE INDICATOR
HKGBKK  =   0   0   0   0              SX
HKGVIE  C   3   0   0   0
        M   4   0   0   0
        H  20   0   0   0
        Q  12   0   0   0
        L   1   0   0   0  -1
        G   0   0   0   0   0
        V   0   0   0   0   0
        =  40   0   0   0
BKKVIE  C   3   0   0   0
        B   1   0   0   0                                                     
SEG    CL BKD GRS BLK W/L LSS LT NOTE INDICATOR                                
        M   1   0   0   0
        H  46   4   0   0
        Q  18   0   0   0
        L   2   0   0   0  -2
        G   0   0   0   0   0
        V   2   0   0   0  -2
        =  73   4   0   0

Im oberen Bereich die Compartment Sicht CD, also Business Class mit D als Subklasse und darunter Y/BMHQLGV: Economy Klasse mit Subklassen. Y und B Klasse waren die offiziellen Tarifen und PEX(sic). Darum sind diese auch nicht zu finden in der darunterliegenden SEG Abteilung. Man sieht auch das der Flug nicht überbucht war: MAX = CAP.

Damals war Überbuchung eher die Aussnahme und wurde durch Bestätigungen von individuellen Buchungen

SEG, das sind die Segmente. Also bei Multi Leg Flüge HKG/BKK VIE gibt es 3 Segmente HKGBKK, HKGVIE und BKKVIE. Die Dinge die Passagiere eigentlich buchen.

Man sieht in der oberen Bereich das 6 C (Business Class) und 113 Y (Economy) Pax ex BKK auf dem Flug waren. L,G,V Klassen hatten ein Segment Limit. L war die "Laudatours Klasse" - später dann Belmondo. Sehr kreativ in der Namensgebung.

Die Segment Limits waren eher problematisch wenn vergessen wurde diese wieder zu öffnen. Das erzeugte dann sogenannte "trapped Inventories". Das Modell der Flugsteuerung wie wir es später mit dem Lufthansa System betrieben hatten war wesentlich besser, obwohl eigentlich eine LEG Steuerung.

Die "G" Klasse war die Gruppenklasse. Da das eine Ansicht des Fluges 2 Tage vor Abflug ist sieht man das alle Gruppen schon dahingeschmolzen waren.

Die Auslastung dieses Fluges war also nicht berauschend - Im Budgetmeeting des Folgemonats hat Nikki sicher gefragt wann wir die Strecke einstellen...

Das Transformationsprogramm

Dieses QuickBasic Programm liest die Fluginventare aus und transformiert diese in strukturierte Textdateien. Diese Bildschirmdarstellungen liegen nach dem herunterladen vom Reservierungssystem als temporäre Textdateien vor. Die erzeugten Textdateien wurden dann in eine Datenbank geladen.

Die Sprache ist QB. Also QuickBasic. Man konnte damit EXE Dateien erzeugen. Diese EXE File wurde mit Batch Dateien aufgerufen (.BAT) um die täglichen Downloads durchzuführen.

Die Laufzeit pro Tag war ca. 1-2 Stunden. Die Datenrate unserer Terminals war damals 2400 Baud.

DECLARE SUB seglines (mflug$, mdat$, mcheck$, mfile$, maxrbd%, maxcomp%, mclass$(), mcompnum%(), lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)
DECLARE SUB leglines (maxcomp%, maxleg%, lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%())
DECLARE FUNCTION gabdat! (mdat$)
DECLARE SUB comprbd (maxrbd%, mclasses$, mclass$(), mcompnum%())
DECLARE SUB scrnheader (header$, maxrbd%, mclass$())
DECLARE SUB scrnleg (maxcomp%, segnum%, maxrbd%, mlegseg%, lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)

REM********************************************************
REM* gabronew .exe
REM* qbasic ro 5aug91
REM* formatiert ro/002/19dec für die in yield dateien um
REM* enhanced 17oct 92 to include pos processing,seg stats,limit sales set vaslues,
REM********************************************************
REM*  current ops max poss rbds,compartments,legs
'iniatial VARIABLES to give a frame to work in
maxcomp% = 4 'maximum nbr of compartments
maxleg% = 5  'maximum nbr of legs
maxrbd% = 20 'maximum nbr of booking classes
maxseg% = 12 'maximum nbr of segs
segnol% = 4 'lines displayed in the scrn output per seg

'idatei$ = "gaboutp.txt"
idatei$ = LEFT$(COMMAND$, 12)
mfile$ = MID$(COMMAND$, 14, 1)
mwait$ = MID$(COMMAND$, 15, 1)
OPEN idatei$ FOR INPUT AS 1
OPEN "scrn:" FOR OUTPUT AS 3
LINE INPUT #1, msg$
IF LEFT$(msg$, 5) = "NO-OP" THEN
  PRINT #3, "NO OP"
  CLOSE
  SYSTEM
END IF
SCREEN 12
header$ = msg$
   mflug$ = MID$(msg$, 3, 4)
   mdat$ = (MID$(msg$, 9, 5))
   odatei$ = LEFT$(mflug$, 3) + mdat$ + ".ro"
OPEN odatei$ FOR OUTPUT AS 2
PRINT #3, gabdat!(mdat$)
   mdays$ = MID$(msg$, 21, 4)
   mclasses$ = MID$(msg$, 27, 18)
   mcheck$ = MID$(DATE$, 7, 4) + LEFT$(DATE$, 2) + MID$(DATE$, 4, 2)
PRINT #3, mdat$; mcheck$; mdays$; mflug$; mclasses$


DIM mcompnum%(maxrbd%), mclass$(maxrbd%)
   CALL comprbd(maxrbd%, mclasses$, mclass$(), mcompnum%())
DIM lcity$(maxleg%), lstat$(maxcomp%, maxleg%), lopn%(maxcomp%, maxleg%), lmax%(maxcomp%, maxleg%), lcap%(maxcomp%, maxleg%), ltob%(maxcomp%, maxleg%)

   CALL leglines(maxcomp%, maxleg%, lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%())
   CALL scrnheader(header$, maxrbd%, mclass$())
   CALL seglines(mflug$, mdat$, mcheck$, mfile$, maxrbd%, maxcomp%, mclass$(), mcompnum%(), lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)
   IF mwait$ = "W" THEN
      INPUT ; "Hit any KEY to CONT"; A%
   END IF


CLOSE
SYSTEM

SUB comprbd (maxrbd%, mclasses$, mclass$(), mcompnum%())
REM****************************************************************
REM* analysiert comp und rbds struktur
REM****************************************************************
PRINT #3, mclasses$
mclnum% = 1
compnum% = 1

FOR count% = 1 TO 20
   test$ = MID$(mclasses$, count%, 1)
   IF test$ = "/" THEN
      compnum% = compnum% + 1
   ELSEIF test$ = CHR$(32) AND count% > 6 THEN
      mclnum% = mclnum% - 1
      maxrbd% = mclnum%
      EXIT FOR
   ELSEIF (test$ = CHR$(32) OR (ASC(test$)) > 47 AND ASC(test$) < 58) AND count < 5 THEN

   ELSE
      mclass$(mclnum%) = test$
      mcompnum%(mclnum%) = compnum%
      PRINT #3, mclnum%;
      PRINT #3, mclass$(mclnum%);
      PRINT #3, mcompnum%(mclnum%)
      mclnum% = mclnum% + 1
   END IF
NEXT count%
END SUB

FUNCTION gabdat! (mdat$)
REM ***********************************************************
REM * formatiert gabdat um
REM ***********************************************************
mdd$ = LEFT$(mdat$, 2)
mmmm$ = RIGHT$(mdat$, 3)
SELECT CASE mmmm$
       CASE "JAN"
            mmm$ = "01"
       CASE "FEB"
            mmm$ = "02"
       CASE "MAR"
            mmm$ = "03"
       CASE "APR"
            mmm$ = "04"
       CASE "MAY"
            mmm$ = "05"
       CASE "JUN"
            mmm$ = "06"
       CASE "JUL"
            mmm$ = "07"
       CASE "AUG"
            mmm$ = "08"
       CASE "SEP"
            mmm$ = "09"
       CASE "OCT"
            mmm$ = "10"
       CASE "NOV"
            mmm$ = "11"
       CASE "DEC"
            mmm$ = "12"
       CASE ELSE
END SELECT
IF VAL(mmm$) < VAL(LEFT$(DATE$, 2)) THEN ' date is next year
   myear$ = RIGHT$(STR$(VAL(MID$(DATE$, 7, 4)) + 1), 4)
ELSE
   myear$ = MID$(DATE$, 7, 4)
END IF
mdat$ = myear$ + mmm$ + mdd$
END FUNCTION

SUB leglines (maxcomp%, maxleg%, lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%())
REM ******************************************************
REM * leglines processes the leg portion of the ro
REM ******************************************************
LINE INPUT #1, msg$
FOR for1% = 1 TO maxcomp% ''for1' loop runs through compartment structure of leg portion in the ro
IF MID$(msg$, 2, 1) = "/" THEN   'programm has found a new cmp header
      LINE INPUT #1, msg$
      for1% = for1% - 1
      FOR for2% = 1 TO maxleg% 'for2 loop runs through leg structure
         IF MID$(msg$, 2, 1) = "/" THEN 'a new comp is found
            for1% = for1% + 1
            EXIT FOR
         ELSEIF MID$(msg$, 1, 1) = " " THEN
            REM*****************************************************
            REM****** entry of numeric position on ro leg portion
            lcity$(for2%) = MID$(msg$, 3, 3)
            lstat$(for1%, for2%) = MID$(msg$, 7, 2)
            lopn%(for1%, for2%) = VAL(MID$(msg$, 10, 3))
            lmax%(for1%, for2%) = VAL(MID$(msg$, 14, 3))
            lcap%(for1%, for2%) = VAL(MID$(msg$, 18, 3))
            ltob%(for1%, for2%) = VAL(MID$(msg$, 22, 3))
            REM****** end of entry
            REM******************************************************
            LINE INPUT #1, msg$
         ELSEIF MID$(msg$, 1, 1) = "=" THEN ' sum portion is encountered
            for2% = for2% - 1
            maxleg% = for2%
            maxcomp% = for1%
            EXIT FOR
         END IF
         NEXT for2%
   ELSEIF MID$(msg$, 3, 3) = "LEG" THEN 'skip this line
      LINE INPUT #1, msg$
   END IF

NEXT for1%
END SUB

SUB scrnheader (header$, maxrbd%, mclass$())

CLS

REM **********************************************************************
REM *********** header printing on screen

COLOR 7: PRINT #3, header$; "                          "
PRINT #3, "                                                                        "
FOR forheader% = 1 TO maxrbd% '***** seg header classes n rbds
   LOCATE 2, forheader% * 3 + 8: COLOR 7: PRINT #3, mclass$(forheader%);
NEXT forheader%
REM ****legheader
LOCATE 2, 16 + maxrbd% * 3: COLOR 7: PRINT #3, "COMP"
LOCATE 2, 21 + maxrbd% * 3: COLOR 7: PRINT #3, "AV"
LOCATE 2, 24 + maxrbd% * 3: COLOR 7: PRINT #3, "OPN"
LOCATE 2, 28 + maxrbd% * 3: COLOR 7: PRINT #3, "MAX"
LOCATE 2, 32 + maxrbd% * 3: COLOR 7: PRINT #3, "CAP"
LOCATE 2, 36 + maxrbd% * 3: COLOR 7: PRINT #3, "T/B"

'******** end of header
END SUB

SUB scrnleg (maxcomp%, segnum%, maxrbd%, mlegseg%, lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)

'prints leginfo to the screen
         FOR legclfor1% = 1 TO maxcomp% 'a leg line is printed for every compartment
                                        'compartment loop
            LOCATE segnum% * segnol% + (legclfor1% - 1), 18 + maxrbd% * 3: COLOR 15: PRINT #3, legclfor1%,
            LOCATE segnum% * segnol% + (legclfor1% - 1), 21 + maxrbd% * 3: COLOR 15: PRINT #3, lstat$(legclfor1%, mlegseg%)
            LOCATE segnum% * segnol% + (legclfor1% - 1), 24 + maxrbd% * 3: COLOR 15: PRINT #3, lopn%(legclfor1%, mlegseg%)
            LOCATE segnum% * segnol% + (legclfor1% - 1), 28 + maxrbd% * 3: COLOR 15: PRINT #3, lmax%(legclfor1%, mlegseg%)
            LOCATE segnum% * segnol% + (legclfor1% - 1), 32 + maxrbd% * 3: COLOR 15: PRINT #3, lcap%(legclfor1%, mlegseg%)
            LOCATE segnum% * segnol% + (legclfor1% - 1), 36 + maxrbd% * 3: COLOR 15: PRINT #3, ltob%(legclfor1%, mlegseg%)
         NEXT legclfor1%
            mlegseg% = mlegseg% + 1  'maybe move this behind seg processing

END SUB

SUB seglines (mflug$, mdat$, mcheck$, mfile$, maxrbd%, maxcomp%, mclass$(), mcompnum%(), lcity$(), lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)
'********************************************************************
'* processes segment lines
'********************************************************************
DIM mdep$(maxseg%), marr$(maxseg%), mbkd%(maxrbd%), mgrs%(maxrbd%), mblk%(maxrbd%), mwl%(maxrbd%), mlss%(maxrbd%), mlsv%(maxrbd%), msegstat$(maxrbd%)

mlegseg% = 1 'variable for first leg printed next to seg portion

LINE INPUT #1, msg$

DO UNTIL EOF(1) ' start of all segment loop
  IF MID$(msg$, 1, 3) = "SEG" OR LEFT$(msg$, 1) = "" THEN
     ' ***** communication exceptions :paged seg header in seg portion
     ' or pn triangle
     LINE INPUT #1, msg$ 'start with seglines and read data

  ELSEIF ASC(MID$(msg$, 6, 1)) > 64 AND ASC(MID$(msg$, 6, 1)) < 91 THEN
      mdep$ = LEFT$(msg$, 3)
      marr$ = MID$(msg$, 4, 3)
      segnum% = segnum% + 1
      IF mdep$ = lcity$(mlegseg%) THEN '*** segment is the same as leg display legs on far right side
         CALL scrnleg(maxcomp%, segnum%, maxrbd%, mlegseg%, lstat$(), lopn%(), lmax%(), lcap%(), ltob%(), segnol%)
      END IF

      'seg city pair print position
      LOCATE segnum% * segnol%, 1: COLOR 15: PRINT #3, mdep$; marr$;
      LOCATE segnum% * segnol%, 7: COLOR 7: PRINT #3, "BK"
      LOCATE segnum% * segnol% + 1, 7: COLOR 7: PRINT #3, "WL"
      LOCATE segnum% * segnol% + 2, 7: COLOR 7: PRINT #3, "LSS"
      LOCATE segnum% * segnol% + 3, 7: COLOR 7: PRINT #3, "LSV"
      sumbkd% = 0
      sumbkc% = 0
      sumbky% = 0
      sumwlc% = 0
      sumwly% = 0
      sumgrs% = 0
      sumblk% = 0
      sumwl% = 0
      sumlsv% = 0
      segrbds$ = "N"  'this indictor shows whther the seg is a controlled
                       'seg or if a notraffic right or permanent req situation
                       'applies
      '***************** position of seg leader info in output file
      IF mfile$ = "F" THEN '*******FILE WRITE :flt,date,seg
         PRINT #2, "'"; mdat$; "',";
         PRINT #2, "'"; mcheck$; "',";
         PRINT #2, "0,"; 'days to be calc by dbase
         PRINT #2, "'"; LEFT$(mflug$, 3); "',"; '3 letter flight numbers
         PRINT #2, "'"; mdep$; "',";
         PRINT #2, "'"; marr$; "',";
      END IF

      FOR for1% = 1 TO maxrbd% ' seg with all rbd loop
         REM************************************************************
         REM********** loop for one segment processeing all classes

         IF MID$(msg$, 1, 3) = "SEG" OR LEFT$(msg$, 1) = "" THEN
            REM ***** communication exceptions :paged seg header in seg portion
            REM ***** or pn triangle
            LINE INPUT #1, msg$
            for1% = for1% - 1 ' variable is reduced so that all classes are run through

         ELSEIF MID$(msg$, 12, 1) = mclass$(for1%) THEN
            REM*********** rbd is in the line and is processed
            REM **** seg values are read and eneterd into array
            REM ro/positions
            msegstat$(for1%) = (MID$(msg$, 9, 2))
            mbkd%(for1%) = VAL(MID$(msg$, 17, 3))
            mgrs%(for1%) = VAL(MID$(msg$, 21, 3))
            mblk%(for1%) = VAL(MID$(msg$, 25, 3))
            mwl%(for1%) = VAL(MID$(msg$, 29, 3))
            mlsv%(for1%) = VAL(MID$(msg$, 33, 3))
            mlss%(for1%) = VAL(MID$(msg$, 37, 3))

            segrbds$ = "Y"
            REM ******* sums for end of line are calculated

            sumbkd% = mbkd%(for1%) + sumbkd%
            sumgrs% = mgrs%(for1%) + sumgrs%
            sumblk% = mblk%(for1%) + sumblk%
            sumwl% = mwl%(for1%) + sumwl%
            sumlsv% = mlsv%(for1%) + sumlsv%
            '********** compartment per seg sums are built
            IF mcompnum%(for1%) = 1 THEN ' c comp  sums are built
               sumbkc% = mbkd%(for1%) + sumbkc%
               sumwlc% = mwl%(for1%) + sumwlc%
            ELSEIF mcompnum%(for1%) = 2 THEN 'y comp sums are built
               sumbky% = mbkd%(for1%) + sumbky%
               sumwly% = mwl%(for1%) + sumwly%
            END IF
            '*********** end of compartment per seg sums


            REM ****** print positions of new seg info bk,wl,ls,gr,bl
             '***** bkd processing        
            IF mbkd%(for1%) > 0 THEN '**** if zero bookings in rbd  only dots are displayed
               LOCATE segnum% * segnol%, (7 + for1% * 3): COLOR 15: PRINT #3, RIGHT$(STR$(mbkd%(for1%)), 3);
            ELSE
               LOCATE segnum% * segnol%, (7 + for1% * 3): COLOR 15: PRINT #3, " .";
            END IF

             '*******wl processing      
            IF (mwl%(for1%)) > 0 THEN '**** display only if there is really a wl
               LOCATE segnum% * segnol% + 1, (7 + for1% * 3): COLOR 12: PRINT #3, RIGHT$(STR$(mwl%(for1%)), 3);
            END IF

             '******lss & lsv processing    
            IF (mlss%(for1%)) > 0 THEN 'limit sales colour action alert bright blue poss action,dark blue
               REM *** lss open
               LOCATE segnum% * segnol% + 2, (7 + for1% * 3): COLOR 3: PRINT #3, RIGHT$(STR$(mlss%(for1%)), 3);
               LOCATE segnum% * segnol% + 3, (7 + for1% * 3): COLOR 3: PRINT #3, RIGHT$(STR$(mlsv%(for1%)), 3);
            ELSEIF (mlss%(for1%)) < 0 THEN
               REM *** lss closed or neg action neg values
               LOCATE segnum% * segnol% + 2, (7 + for1% * 3): COLOR 11: PRINT #3, RIGHT$(STR$(mlss%(for1%)), 3);
               LOCATE segnum% * segnol% + 3, (7 + for1% * 3): COLOR 11: PRINT #3, RIGHT$(STR$(mlsv%(for1%)), 3);
            ELSEIF (mlss%(for1%)) = 0 AND MID$(msg$, 36, 1) = "0" THEN '****LSS position
               REM *** lss either 0 or val=0 adjust lss
               LOCATE segnum% * segnol% + 2, (7 + for1% * 3): COLOR 11: PRINT #3, RIGHT$(STR$(mlss%(for1%)), 3);
               LOCATE segnum% * segnol% + 3, (7 + for1% * 3): COLOR 11: PRINT #3, RIGHT$(STR$(mlsv%(for1%)), 3);
            ELSE
               LOCATE segnum% * segnol% + 3, (7 + for1% * 3): COLOR 3: PRINT #3, RIGHT$(STR$(mlsv%(for1%)), 3);
            END IF '****** limit sales colour action codes

            IF MID$(msg$, 39, 1) = "C" THEN   'If compartment limits are in effect alpha indication is read
                                              'important:position of lss +2 characters
               LOCATE segnum% * segnol% + 2, (7 + for1% * 3): COLOR 3: PRINT #3, MID$(msg$, 35, 2)'lss printed ***LSS position
            END IF




            '*********print position into output file
            IF mfile$ = "F" THEN '*******FILE WRITE :normal class
               PRINT #2, "'"; mclass$(for1%); "',";
               PRINT #2, mbkd%(for1%); ",";
               PRINT #2, mwl%(for1%); ",";
               '****** ro /char position
               PRINT #2, "'"; MID$(msg$, 37, 3); "',"; 'lss printed ***LSS position
            END IF
            IF for1% <= maxrbd% THEN '0 bookings are in a seg and only lims are set no sum line "= " is created
               LINE INPUT #1, msg$
            END IF

         ELSEIF MID$(msg$, 12, 1) = "=" AND (MID$(msg$, 53, 2) = "SX" OR MID$(msg$, 53, 1) = "P") AND segrbds$ = "N" THEN '
          '*******if it is a sum line the line is ignored
            LINE INPUT #1, msg$
            IF mfile$ = "F" THEN '*******FILE WRITE :No Trafic seg: emty recs
               FOR for2% = 1 TO maxrbd% ' seg with all rbd loop
                  PRINT #2, "'', , ,'',";
               NEXT for2%
            END IF
            EXIT FOR
         ELSE ' class is not displayed there are no values
            REM **** if there are no values 0 are assigned
            mbkd%(for1%) = 0
            mgrs%(for1%) = 0
            mblk%(for1%) = 0
            mwl%(for1%) = 0
            mlss%(for1%) = 0
            REM *****for 0 bkd pax ony dots are displayed
            LOCATE segnum% * segnol%, (7 + for1% * 3): COLOR 7: PRINT #3, " .";

            '*********print position into output file
            IF mfile$ = "F" THEN '*******FILE WRITE :class without bookings
               PRINT #2, "'"; mclass$(for1%); "',";
               PRINT #2, mbkd%(for1%); ",";
               PRINT #2, mwl%(for1%); ",";
               PRINT #2, "'',";
            END IF


         END IF
      NEXT for1%  'end of seg all rbd loop


      '*********** position for seg and associated leg sums

       IF mfile$ = "F" THEN '*******FILE WRITE :segsums for wl grp etc
       '*******file associated leg info to seg
         PRINT #2, sumbkc%; ","; sumbky%; ","; sumbkd%; ",";
         PRINT #2, sumwlc%; ","; sumwly%; ","; sumwl%; ",";
         PRINT #2, sumgrs% + sumblk%; ",";
         PRINT #2, "'"; RIGHT$(STR$(lmax%(1, mlegseg% - 1)), 3); "',"; 'dbase: cmax
         PRINT #2, "'"; RIGHT$(STR$(lmax%(2, mlegseg% - 1)), 3); "',"; 'dbase: ymax
         PRINT #2, "'"; RIGHT$(STR$(lmax%(1, mlegseg% - 1) + lmax%(2, mlegseg% - 1)), 3); "',"; 'dbase: ttlmax

         PRINT #2, "'"; RIGHT$(STR$(lcap%(1, mlegseg% - 1)), 3); "',"; 'dbase: ccap
         PRINT #2, "'"; RIGHT$(STR$(lcap%(2, mlegseg% - 1)), 3); "',"; 'dbase: ycap
         PRINT #2, "'"; RIGHT$(STR$(lcap%(1, mlegseg% - 1) + lcap%(2, mlegseg% - 1)), 3); "',"; 'dbase: ttlcap

         PRINT #2, "'"; RIGHT$(STR$(ltob%(1, mlegseg% - 1)), 3); "',"; 'dbase: ctob
         PRINT #2, "'"; RIGHT$(STR$(ltob%(2, mlegseg% - 1)), 3); "',"; 'dbase: ytob
         PRINT #2, "'"; RIGHT$(STR$(ltob%(1, mlegseg% - 1) + ltob%(2, mlegseg% - 1)), 3); "',"; 'dbase: ttltob
         PRINT #2, "'"; RIGHT$(STR$(segnum%), 1); "',";

       END IF

      '*********** end of seg and associated leg sums     
      PRINT #2, '*****linefeed at the end of seglines

      REM*************************************************************
      REM*********** seg sums and leg info printing
      LOCATE segnum% * segnol%, (8 + for1% * 3): COLOR 15: PRINT #3, "="; RIGHT$(STR$(sumbkd%), 3);
      LOCATE segnum% * segnol%, (12 + for1% * 3): COLOR 14: PRINT #3, "/"; RIGHT$(STR$(sumgrs% + sumblk%), 3)
      LOCATE segnum% * segnol% + 1, (8 + for1% * 3): COLOR 15: PRINT #3, "=";
      LOCATE segnum% * segnol% + 1, (9 + for1% * 3): COLOR 12: PRINT #3, RIGHT$(STR$(sumwl%), 3);
      LOCATE segnum% * segnol% + 3, (8 + for1% * 3): COLOR 3: PRINT #3, "=";
      LOCATE segnum% * segnol% + 3, (9 + for1% * 3): COLOR 3: PRINT #3, RIGHT$(STR$(sumlsv%), 3);

      PRINT #3,
      REM**************************************************************
   ELSE
      LINE INPUT #1, msg$
   END IF
LOOP ' end of all segment loop

END SUB

Und hier der Typische Output: Daten die man in eine Datenbank / Excel (gabs damals noch nicht, es gab Lotus 123 als spreadsheet)

"NG","007","03.12.1996","VIE","BKK",197,"C",0,0,"AS",24,24,10,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"Z",0,0,"AS",14,14,14,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"J",0,0,"CL",0,0,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"H",0,70,"AS",162,232,10,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"B",0,70,"AS",152,222,30,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"M",0,70,"AS",122,192,50,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"V",0,70,"AS",72,142,50,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"L",70,70,"AS",22,92,40,70,0,0,0,0,0,110
"NG","007","03.12.1996","VIE","BKK",197,"W",0,0,"AS",22,48,40,0,0,0,0,0,0,120
"NG","007","03.12.1996","VIE","BKK",197,"Q",0,0,"CL",0,0,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","VIE","BKK",197,"U",0,0,"CL",0,0,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"C",0,0,"AS",24,24,10,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"Z",0,0,"AS",14,14,14,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"J",0,0,"CL",0,0,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"H",0,110,"AS",110,220,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"B",0,110,"AS",110,220,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"M",0,110,"AS",110,220,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"V",0,110,"AS",110,220,0,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"L",110,110,"AS",110,220,0,110,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"W",0,0,"AS",110,220,120,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"Q",0,0,"AS",100,100,100,0,0,0,0,0,0,100
"NG","007","03.12.1996","BKK","HKG",197,"U",0,0,"CL",0,0,0,0,0,0,0,0,0,100
Author: , igumbi.com. Ich bin auf twitter zu finden: @smtm, und als roland.oth auf Facebook.
igumbi online Hotelsoftware - jetzt unverbindlich probieren
Hotelsoftware Demo: System Übersicht der Funktionen

igumbi ist eine online Hotelsoftware mit einem einfachen und schnellen Buchungstool für Ihre Website. Mit dynamischen Preisen auf Ihrer Website und in den Portalen erhöhen Sie Ihren Umsatz und Gewinn.

Wir steigern Ihre provisionsfreien Direktbuchungen. Sie sparen Zeit und haben mit der iPhone App unterwegs Zugriff auf Ihre Daten.

Testen Sie die igumbi Hotelsoftware für 30 Tage. Eine Kreditkarte ist nicht erforderlich.

Kommentare

Karin Fidler
vor mehr als 7 Jahren

... ein bisschen dbase und lotus123 durfte ich in meinem Ferienjob beim P.S.K.Datendienst 1994 auch noch kennenlernen... ich glaube, heute schätzen wir, die diese anfänge miterlebt haben, den derzeitigen stand der technologien schon sehr...

Kommentar hinzufügen
erforderlich

erforderlich, wird nicht publiziert