PDA

View Full Version : Problem mit Datenstrukturen - RNF3315



homue
02-05-12, 10:59
Hallo Zusammen,

ich habe ein Problem bei der Definition von Datenstrukturen.



FDATEI IF E K DISK PREFIX(FILE)

D ACT_DATEI1 E DS EXTNAME(DATEI) PREFIX(FILE)
D SAVE_DATEI1 E DS EXTNAME(DATEI) PREFIX(SAVE_)

D DS_MONATE DS
D FILEJAN
D FILEFEB
D FILEMAR
D FILEAPR
D FILEMAY
D FILEJUN
D FILEJUL
D FILEAUG
D FILESEP
D FILEOCT
D FILENOV
D FILEDEC
D AR_MONATE 12 2 DIM(12) OVERLAY(DS_MONATE)
Bei der Umwandlung bekomme ich für alle Unterfelder der DS_MONATE einen Fehler RNF3315 - Der Eintrag für den Namen wurde bereits in einer Definitionsbestimmung definiert; standardmäßig werden Leerzeichen angenommen.
Muss ich hier meine Feldgruppe manuell füllen oder gibt es eine Möglichkeit den RNF3315 zu umgehen?

Vielen Dank im Voraus!

Holger

Fuerchau
02-05-12, 11:07
Die Felder FileJan bis FileDec sind in ihrer Länge ja nicht definiert!

Overlay geht meines Wissens nicht auf DS.

Die Definition sollte andersherum laufen:
D DS_Monate DS
D AlleMonate 144
D FileJan 12 overlay(AlleMonate:1)
D FileFeb 12 overlay(AlleMonate:*next)
D :
D FileDec ...
D ArMonate 12 dim(12) overlay(AlleMonate)

homue
02-05-12, 11:12
Hallo Fuerchau,

die Felder in der Datei sind Jan-Dec und mit 12,2 definiert. Wenn ich ohne die externe Datenstruktur (EXTNAME) arbeite funktioniert alles einwandfrei. Das Problem scheint mir zu sein, dass die Felder nun in zwei verschiedenen Datenstrukturen verwendet werden.

Gruß Holger

andreaspr@aon.at
02-05-12, 11:40
Nachdem in der DS ACT_DATEI1 das Prefix nur "FILE" ist, werden diese Felder mit DS_MONATE zusammenstoßen.
Ich schätze du willst im Prefix "FILE_" verwenden?


FDATEI IF E K DISK PREFIX(FILE)

D ACT_DATEI1 E DS EXTNAME(DATEI) PREFIX(FILE_)
D SAVE_DATEI1 E DS EXTNAME(DATEI) PREFIX(SAVE_)

D DS_MONATE DS
D FILEJAN
D FILEFEB
D FILEMAR
D FILEAPR
D FILEMAY
D FILEJUN
D FILEJUL
D FILEAUG
D FILESEP
D FILEOCT
D FILENOV
D FILEDEC
D AR_MONATE 12 2 DIM(12) OVERLAY(DS_MONATE)


lg Andreas

Fuerchau
02-05-12, 12:11
Das ist das übliche Problem, dass ein Feld nur einmal in einer DS vorhanden sein darf.
Möchtest du ein Feld in verschiedenen Strukturen ist "qualified" zu verwenden.
Ich denke aber nicht, dass dies dein Problem löst, da du dir ja wohl die Move's sparen willst.

Du kannst natürliche die externe DS um weitere Felder einfach ergänzen.
Schau dir das Listing an, von welcher Position bis zu welcher die Felder FILExxx gehen und hänge ein

D AR_Monate P von bis 2 dim(12)

an.
Dadurch überlagerst du die entsprechenden Felder mit dem Array.

Pikachu
02-05-12, 13:39
Wenn ich ohne die externe Datenstruktur (EXTNAME) arbeite funktioniert alles einwandfrei.
Na dann laß sie doch weg. ;)

homue
04-05-12, 08:15
Hallo Zusammen,

vielen Dank schonmal für die Antworten.
Der angegebene Sourcecode ist, wie sicher schon aufgefallen ist, nur ein Beispiel.
Es handelt sich bei den realen Dateien um alte Dateien bei denen Kopf- und Postionsdaten in einem Datensatz stehen. Die Datei aufzuteilen ist mir wegen des Aufwands (Datei wird in vielen Programmen benutzt) nicht möglich.
Leider stehen in den Dateien die benötigten Felder nicht hintereinander.
Daher kann ich keine Feldgruppe direkt über die Externe DS legen.
Die externe DS findet Verwendung im Programm und kann nicht einfach weggelassen werden.
Kennt keiner eine elegante Möglichkeit ein Array direkt aus den Dateifeldern (nach dem READ des Datensatzes) zu befüllen wenn ich die Felder in einer externen DS verwende?

Gruß Holger

RobertMack
04-05-12, 08:46
...evtl. DS mit OCCURS() statt Felder mit DIM() - einfach vor jedem Read Zähler+1

Fuerchau
04-05-12, 09:05
Außer Einzelmoves (halt Tipparbeit und ggf. 2 Subroutinen für hin und zurück) gibt es da leider direkt nichts elegantes.

Eine Möglichkeit (releaseabhängig) sind "qualified" Strukturen.
In diesem Fall kann man "eval-corr" verwenden um Felder gleichen Namens zu übertragen.
Allerdings müssen dann beide Strukturen qualified sein und i.M. weiß ich nicht, wie man in den F-Bestimmungen die qualified-Struktur zum Befüllen angibt.

Desweiteren erfolgen dann alle Zugriffe immer per "Strukturname.Feldname", was wohl zu einigen Codeänderungen führt.