WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 26.03.2005, 11:38   #1
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard [Cobol] Index "missbrauchen"

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
pong ist offline   Mit Zitat antworten
Alt 29.03.2005, 15:22   #2
YDM
Newbie
 
Registriert seit: 01.02.2005
Beiträge: 19


Standard

Es gibt in COBOL ja zwei Arten um auf eine Tabelle zuzugreifen:
  • Normalindizierung (Numerisches Feld, Literal)
  • Spezialindizierung (INDEXED BY)
Bei Spezialindizierung ist der Index ein 4-Byte-Element dass die relative Adresse (Offset) des Tabellenelements enthält.
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.
YDM ist offline   Mit Zitat antworten
Alt 05.04.2005, 15:52   #3
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

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:
77 indexfeld pic 9(5) comp-3 value 0.
____________________________________
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.
Satan_666 ist offline   Mit Zitat antworten
Alt 05.04.2005, 19:28   #4
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

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
pong ist offline   Mit Zitat antworten
Alt 06.04.2005, 08:42   #5
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

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.
Satan_666 ist offline   Mit Zitat antworten
Alt 06.04.2005, 18:00   #6
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

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
pong ist offline   Mit Zitat antworten
Alt 07.04.2005, 10:14   #7
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

Du hast von Cobol wohl wenig Ahnung, was? Im Klartext: Du schreibst im Programm folgende Zeile

Zitat:
move 12345 to tabelle (idx).
Das Feld 'idx' hast Du mit

Zitat:
77 idx pic 9(5).
definiert. Was bedeutet das?

Zum Zeitpunkt des Compilierens des Programmes legt der Compiler ein Feld an:

Zitat:
77 zwischenfeld-vom-compiler pic s9(5) comp-3.
Jedesmal, wenn Dein Programm zur Laufzeit (!!!) zum obigen Befehl kommt, wird implizit ein

Zitat:
move idx to zwischenfeld-vom-compiler.
durchgeführt. Dabei kann es sogar passieren, dass er diesen 'move' jedesmal durchführt, wenn beispielsweise mehrere gleichlautende Befehle a-la

Zitat:
move a to tabelle-a (idx).
move b to tabelle-b (idx).
move c to tabelle-c (idx).
:
:
schreibst. Da habe ich schon die verrücktesten Dinge gesehen in meiner mehr als 20-jährigen Cobol-Laufbahn...

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.
Satan_666 ist offline   Mit Zitat antworten
Alt 08.04.2005, 12:21   #8
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

Nicht

Zitat:
move 12345 to tabelle (idx)
Sondern

Zitat:
move 2 to idx


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
pong ist offline   Mit Zitat antworten
Alt 08.04.2005, 14:11   #9
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

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.
Satan_666 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:27 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag