2009-03-28 15 views
3

Hey, alle zusammen. Ich habe ein paar Probleme in einem Coding-Projekt, das ich mit COBOL in der zOS-Umgebung angehen möchte. Ich muss eine Datei lesen und sie in eine indizierte Tabelle einfügen (ich weiß, dass es weniger als 90 Datensätze geben wird).COBOL Verwirrung

Die Sache, die mich wirft ist, dass wir durch die Parameter des Projekts gebunden sind, um eine Variable namens "Table-Size" zu verwenden (bei Deklaration auf Null gesetzt).

Gegeben all das, ich muss etwas tun wie "Tritt 1 bis 90 mal je nach Tabellengröße", aber ich verstehe nicht, wie das funktioniert, wenn die Tabellengröße muss (soweit ich das beurteilen kann) weil die Tabellengröße mit jedem Eintrag erhöht wird, der zur Tabelle hinzugefügt wird. Kann mir bitte jemand das aufräumen?

Danke!

Antwort

9

Es klingt wie Ihre primäre Sorge ist: Wie weiß der Compiler, wie viel im Array zugeordnet werden soll, wenn sich die Größe zur Laufzeit ändert?

Die Antwort ist, dass es die maximale Menge an Speicherplatz zuweist (genug für 90 Einträge). Beachten Sie, dass dies für Platz in Arbeitsspeicher ist. Wenn der Datensatz in eine Datei geschrieben wird, wird nur der relevante Teil geschrieben.

Ein Beispiel:

01 TABLE-SIZE PIC 9 
01 TABLE OCCURS 1 TO 9 TIMES DEPENDING ON TABLE-SIZE 
    03 FLD1 PIC X(4) 

Diese 36 Zeichen zugewiesen werden (9 multipliziert mit 4) für TABLE in Speicher arbeiten. Wenn TABLE-SIZE auf 2 gesetzt wird, wenn der Datensatz in eine Datei geschrieben wird, werden nur 8 Zeichen von TABLE geschrieben (über die Zeichen geschrieben für TABLE-SIZE natürlich).

So zum Beispiel, wenn der Speicher durch TABLE besetzt AaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii ist, das Datum in die Datei geschrieben wird, kann die verkürzte (einschließlich Größe) sein: 2AaaaBbbb.

In ähnlicher Weise werden beim Zurücklesen des Datensatzes sowohl TABLE-SIZE als auch die relevanten Bits TABLE aus der Datei (nur die Größe und die ersten beiden Elemente) gefüllt.

Ich glaube nicht, dass die unbenutzten TABLE Einträge auf alles initialisiert werden, wenn das auftritt. Es ist am besten, dies nicht zu tun und sie explizit aufzufüllen, wenn Sie der Tabelle ein weiteres Element hinzufügen müssen.

Aus Effizienzgründen sollten Sie die Einstellung TABLE-SIZE auf USAGE IS COMP in Betracht ziehen.

+0

Genau das habe ich versucht zu verstehen. Danke für deine Zeit und dein Wissen. – Enyalius

+0

Die Verarbeitung von Daten mit variabler Länge ist bereits langwierig. Die Verwendung eines USAGE DISPLAY-Felds für die ODO-Variable fügt diesem zu keinem Zweck hinzu. Definieren Sie das als "binär". –

+0

@Bill, das ist ein guter Punkt, obwohl meiner Meinung nach tangential zu der Frage verwandt. Ich werde eine Notiz hinzufügen, da es definitiv ein guter Rat ist. – paxdiablo

2

Wir haben hier nicht genug Informationen, aber die grundlegende Sache ist, dass die in der DEPENDING ON-Klausel genannte Variable eine Zählung der variablen Anzahl von Gruppen haben muss. Sie brauchen so etwas wie

01 TABLE-SIZE  PIC 99 
01 TABLE OCCURS 1 TO 90 TIMES 
     DEPENDING ON TABLE-SIZE 
    03 FIELD-1 
    03 FIELD-2 

und so weiter.

Siehe this article oder this article bei Publib.

+0

Vielen Dank für das Referenzmaterial, Charlie.Ich werde es überprüfen, und ich bin sicher, dass es mir in Zukunft helfen wird Danke! – Enyalius

+0

Das Gleiche wie oben. Machen Sie TABLE-SIZE "binär". –