PDA

View Full Version : Lesen einer log. File mit spezieler Sortierfolge



AKS1
13-11-19, 14:00
Hallo,
habe ein Programm mit log. File. welche dort eingelesen wird.
Der Key beinhaltet auch die Lager-Nr. gezont 2, 0.
Die Lager sind 01 - 99.
Jetzt soll die Lesefolge geändert werden. Das Lager 05 soll als letztes Lager gelesen werden.
Frage: Wie kann ich das über eine neue Log.-File lösen?
Möchte an dem alten Programm nicht viel ändern.
Gibt es hier eine einfache Lösung?
Danke.

RobertMack
13-11-19, 15:51
Möchte an dem alten Programm nicht viel ändern.


Wenn's pragmatisch sein darf:
Leseschleife (Subroutine?) zweimal ausführen, Schalter aus = ohne 05, Schalter an = nur 05.

Fuerchau
13-11-19, 15:56
Jein.
Erstelle eine neue Tabelle mit "Lager-Nr.", "Sortierfeld".
Dann kannst du mit dieser Joinen (per SQL oder LF) und nach Sortierfeld lesen.

Wenn du in SQL bist, dann gehts auch einfach (aber nicht performant):

select * from (
select f1, f2, ...
,case lager
when 05 then 99
when 01 then 05
when 02 then 01
other 90
end lagersort
from lager
) x
order by lagersort, lager

AKS1
13-11-19, 16:36
Danke.
Werde in der phy. Datei ein neues Feld zur Sortierung anhängen. Dieses Feld wird bei Lager = 05 mit '99' gefüllt. Wenn nicht Lager 05 mit '01'. Somit bin ich für zukünftige Änderungen in der Lesefolge flexibel.
Das Feld für die Sortierfolge wird dann vor den eingentlichen Lager in der log. Files bei den Keys definiert.

K Firma
K Artnr
K Charge
K Sortierung
K Lager
K Raum
K Fach
K Platz

jajonowak
14-11-19, 13:10
wenn es eine dds beschriebene Datei ist, kann man auch
K KBBSJH DESCEND
K KBBSJJ DESCEND
K KBBSMM DESCEND
verwenden (hier: Jahrhundert;Jahrzehnt;Monat - jüngster Eintrag zuerst)

AKS1
14-11-19, 14:04
wenn es eine dds beschriebene Datei ist, kann man auch
K KBBSJH DESCEND
K KBBSJJ DESCEND
K KBBSMM DESCEND
verwenden (hier: Jahrhundert;Jahrzehnt;Monat - jüngster Eintrag zuerst)

Wenn Lager 05 das Lager 01 wäre, könnte man absteigend lesen.
Ist es aber nicht.
Aus Prod.-Gründen dürfen Rohstoffe (ArtNr,Chargen) nur zuletzt aus dem Lager 05 entnommen werden.

BenderD
14-11-19, 14:44
... wenns nur um das lager 05 geht, hilft auch trick 17
select abs(l.lager_nr - 5) sortfield , l.* from lager l
order by sortfield desc

mit ein wenig Gehirnschmalz lässt sich da eigentlich fast jede Sortierung rausentwickeln.

D*B

B.Hauser
15-11-19, 13:18
Du brauchst weder die physische Datei zu ändern, noch musst Du dein Programm umstricken:
Du musst lediglich einen neuen (SQL)Index generieren und die logische Datei in Deinem Programm durch den Index ersetzen und neu umwandeln.
SQL Indices können mit native I/O genauso verarbeitet werden wie geschlüsselte logische Dateien.
Bei Änderungen musst Du lediglich den Index ändern.

Das Erstellungsstatement für den SQL-Index sollte in etwa so aussehen:

Create Index YourSchema.YourTable
(Firma, ArtNr, Charge, Sortierung,
Case When Lager = 5 Then 1000
Else Lager End as SortLager,
Raum, Fach, Platz)
Rcdfmt RCDFMTX Add All Columns;

Im Übrigen kann SQL (seit 7.1) auch solche derived Indices verwenden, vorausgesetzt die Syntax in dem SELECT-Statement stimmt genau mit der Syntax im Index überein.

Birgitta