Anmelden

View Full Version : Satzlänge einer Datei in RPG /CL ermitteln



Kaufmann
19-11-08, 07:33
Ich brauche eine Möglichkeit die Gesamtlänge einer Datei in einem Programm zu ermitteln. Habe etwas mit RTVOBJD rumgespielt, finde aber a nicht den richtigen Wert.
Kann mir da einer helfen?

akorb
19-11-08, 07:40
Hallo,

der Befehl DSPFD sollte funktionieren. Folgendes machen:

1. DSPFD FILE(LIB/DATEI) TYPE(*RCDFMT) OUTPUT(*OUTFILE) OUTFILE(OUTLIB/OUTFILE).

2. In der Datei OUTFILE gibt es dann das Feld RFLEN. Hier steht die Länge drin.

Gruss
akorb

jajonowak
19-11-08, 08:57
hallo kaufmann

in der qsys/qadbxref stehen ebenfalls die benötigten Informationen.


lg
Hans-Joachim

Khholm
19-11-08, 13:18
oder mit dem API

List Record Formats (QUSLRCD) API




Karl-Heinz

B.Hauser
19-11-08, 17:51
Hallo,

man kann auch die Satzlänge über die Catalog-View SYSTABLES in der QSYS2 ermitteln:




SELECT ROW_LENGTH
FROM SYSTABLES
WHERE system_Table_name = 'MYFILE'
and system_Table_Schema = 'MYLIB'


Birgitta

Fuerchau
20-11-08, 08:04
Die Satzlänge einer Datei spielt doch eigentlich gar keine Rolle, da sie i.W. eine Pufferlänge und nicht die tatsächliche Satzlänge wiedergibt.
Mit SQL ist das sowieso egal, da automatische Konvertierungen zwischen Hostvariablen stattfinden.
In RPG stellt sich das auch noch etwas anders dar, wenn ich nämlich eine Dezimal-Variable in einer DSPF/PRTF verwende wird die generell gezont definiert!
Nur wenn ich die PF/LF in einer DS (extern) angebe, werden gepackte Dezimalfelder auch als gepackt definiert.

Insbesonders Datumsfelder hängen von dem in der H-Bestimmung (Compileroption) angegebenen Datumsformat ab und sind eben nicht immer 10-Stellig.

Die physische Satzlänge gibt es eigentlich auch nicht, da insbesonder LOB's und z.T. VARLEN-Felder gar nicht im eigentlichen Satz gespeichert werden sondern über Zeiger verwaltet werden.

Man bedenke auch die Speicherungsform von DATE/TIME/TIMESTAMP-Felder.
Timestamps sind im Puffer z.B. 26 Stellen, belegen tatsächlich aber nur 8 Bytes (64-Bit).

Wenn ich mir dann noch die eigentlich Frage ansehe "Gesamtlänge einer Datei" so ist das für mich ganz einfach die Objektgröße und nicht die Satzlänge.

Die Objektgröße erfahre ich mit RTVOBJD ... SIZE(&MYSIZE), bei Teildaten RTVMBRD kann ich die Information noch trennen mit DTASPCSIZ bzw. ACCPTHSIZ,

E305GL
26-11-08, 08:38
in der "open feedback area" steht alles drin. die entsprechende datenstruktur wird durch das schlüsselwort INFDS in den RPG-dateibestimmungen befüllt. weitere literatur AS/400 programmierung datenverwaltung sc12-3918-2 anhang A-1. im VARPG ist nach dem open noch die POST-operation erforderlich.