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.
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
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.
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...