![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() |
![]() Hallo,
jaja wieder mal ein Problem: Habe einen 3-dimensionalen Table aufgebaut 3x8x10. Für hab ich einen Index per indexed by erstellt. Nun möchte ich den Index der dritten Verschachtelung als Index für einen weiteren 1-dimensionalen Table verwenden, allerdings stürzt mit bei Durchführung das Programm mit dem Fehler, dass ein Element referenziert wird welches nicht deklariert ist bzw. ein Abend 4038 auf einem MVS/zos (beim 1-dimensionalen Table). Kann mir vielleicht jemand sagen warum? Ich war eigentlich der Meinung, dass bei einem mittels indexed by erstellten Index, immer ein ganzzahliger Wert bzw. der Wert als Halbbyte drinnsteht, oder liege ich da falsch? (Was genau geht denn dabei vor... ich kann es nun wirklich nicht nachvollziehen) pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
![]() |
![]() |
![]() |
#2 |
Newbie
![]() Registriert seit: 01.02.2005
Beiträge: 19
|
![]() Es gibt in COBOL ja zwei Arten um auf eine Tabelle zuzugreifen:
Bei der Normalindizierung hingegen ist der Index immer der Zähler für die Feldposition. Bei der Spezialindizierung wird die Adresse immer vor dem Zugriff auf das Tabellenelement berechnet (bei Änderung des Index mit SET). Bei der Normalindizierung hingegen immer erst direkt beim Zugriff. Ein Spezialindex ist nur für die Adressierung der Tabelle/Tabellenebene vorgesehen für die er auch deklariert worden ist. |
![]() |
![]() |
![]() |
#3 | |
Inventar
![]() Registriert seit: 03.09.2000
Beiträge: 4.010
|
![]() Was YMD so trocken schreibt, stimmt genau!
Oder einfach ausgedrückt: ein Index, definiert mit indexed by, ist immer mit der Tabelle verknüpft, bei der der Index anglegt wurde und somit außerhalb dessen nicht verwendbar. Verwende einfach 1 normales Datenfeld zur Indizierung beider Tabellen: Zitat:
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen. |
|
![]() |
![]() |
![]() |
#4 |
Inventar
![]() |
![]() Danke, aber die Erklärung von YMD war schon total ok, habs leider sowieso nur mehr mittels 3 numerischen Werten lösen können, schade eigentlich, hat mir den Code total verhunzt
Aber comp-3 nutzt ich für sowas nicht, brauch ja weder Vorzeichen noch Komma, somit bringts mir keinen Vorteil. pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 03.09.2000
Beiträge: 4.010
|
![]() comp-3 hat nix mit Vorzeichen oder Komma zu tun; comp-3 ist ein so genanntes gepacktes Datenformat, wo für jede Ziffer nur ein halbes Byte verwendet wird.
Beispiel - die Zahl 12345: - ohne comp-3 wird sie wie folgt codiert (hex-Schreibweise): F1F2F3F4F5 - mit comp-3 wird sie aber so codiert: 12345F Ohne kostet die Zahl eben 5 Byte, mit nur 3! Außerdem ist die Maschine mit comp-3 deutlich schneller, weil der Compiler dieses Format voraussetzt und notfalls selber intern konvertiert. Gerade bei Tabellen-Indices ein nicht zu vernachlässigender Mehraufwand bei der Durchführung des Programmes!
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen. |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() |
![]() Nur machts bei so geringen Zahlen keinen Unterschied, da 95% nur Zuweisungen geschehen
Und Platz ist auch kein Thema http://www.microfocus.com/Academic/P...landBinary.asp pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
![]() |
![]() |
![]() |
#7 | |||||
Inventar
![]() Registriert seit: 03.09.2000
Beiträge: 4.010
|
![]() Du hast von Cobol wohl wenig Ahnung, was? Im Klartext: Du schreibst im Programm folgende Zeile
Zitat:
Zitat:
Zum Zeitpunkt des Compilierens des Programmes legt der Compiler ein Feld an: Zitat:
Zitat:
Zitat:
![]() Dieser Aufwand ist generell leicht zu vermeiden, wenn Du dieses 'comp-3' einfach bei der Datendefinition dazuschreibst. Dein Aufwand steht hier in keinem Verhältnis zum Vorteil einer rascheren Durchführung des Programmes. Auch wenn die Tabelle nicht groß ist und auch nicht oft angesprochen wird, sollte man sich solche Sachen angewöhnen, weil es dadurch 'in Fleisch und Blut' übergeht.
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen. |
|||||
![]() |
![]() |
![]() |
#8 | ||
Inventar
![]() |
![]() Nicht
Zitat:
Zitat:
![]() Aber da du ja - zwangsweise - viel Wissen hast usage comp-3 ist doch äquivalent mit einem packed-decimal, oder irre ich da? pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug Nicht klicken! Erstposteralarm/Beschwerde/Kummerkasten Verplattet |
||
![]() |
![]() |
![]() |
#9 |
Inventar
![]() Registriert seit: 03.09.2000
Beiträge: 4.010
|
![]() Das belegen des Indexes ist nicht das Problem - das Zugreifen auf die Tabelle wird langsamer, wenn Du dieses comp-3 nicht anführst! Weil eben vor jeder Verwendung als Index der Inhalt konvertiert wird.
Das 'usage' ist optional, brauchst Du also nicht angeben - und es stimmt: packed-decimal ist der Fachbegriff dafür!
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|