Zum Inhalt springen

COBOL: comp-3 Feld in Datengruppe schieben


Schiller256

Empfohlene Beiträge

Also ich habe glaube ich gerade ein Brett vor dem Kopf. Ich möchte ein Feld was PIC 9(4) COMP-3 definiert ist in eine Datengruppe verschieben.


*FELD1 enthält ein Datum im Format MMJJ

 01  FELD1	PIC 9(4) COMP-3.

*PACKED-DECIMAL = COMP-3.

 01  FELD2.

     05  FELD2-MM	PIC 99.

     05  FILLER    	PIC X VALUE '.'.

     05  FELD2-JJ	PIC 99.

*FELD2 soll das Datum im Format MM.JJ ausgeben		

Wenn ich jetzt einfach MOVE FELD1 TO FELD2 mache dann kommt da nichts brauchbares bei raus also nicht was man als Mensch lesen kann. Ich möchte das aus dem Format MMJJ das Format MM.JJ entsteht. Wie kann ich das machen brauche ich da vielleicht doch noch ein paar Zwischenfelder? Ich habe mich mit den gepackten und binären Formaten schon eine weile nicht mehr befasst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo erstens ist das comp-3 ein Problem und zweitens ist die eine Variable 4 Stellig und die andere 5 Stellig.

Also erstmal solltest du deine comp-3 auf eine normale Variable schieben.

und dann must das halt die ersten beidne stellen in die ersten beiden der struktur und dann die letzten beiden in die letzten beiden der Struktur. wenn du einfach nur ein move machst dann wird die 3. Stelle auf den Punkt geschoben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo erstmal Danke!

Das mit dem Zwischenfeld habe ich mir schon gedacht habe auch mal eins angelegt nur ändert sich da nichts an der Ausgabe. Irgendwie stehe ich da etwas auf dem Schlauch. Mein Code sieht jetzt folgendermaßen aus:


*FELD1 enthält ein Datum im Format MMJJ

 01  FELD1	PIC 9(4) COMP-3.

*PACKED-DECIMAL = COMP-3.

 01  FELD2.

     05  FELD2-MM	PIC 99.

     05  FILLER    	PIC X VALUE '.'.

     05  FELD2-JJ	PIC 99.

*FELD2 soll das Datum im Format MM.JJ ausgeben	

 01  FELD3.

     05 FELD3-MM	PIC 99.

     05 FELD3-JJ	PIC 99.

*…

 MOVE FELD1 TO FELD3

 MOVE FELD3-MM 	TO FELD2-MM

 MOVE FELD3-JJ	TO FELD2-JJ

*jetzt ein Display für die Ausgabe

 DISPLAY FELD1 '--' FELD3 '--' FELD2

*das steht drin wenn ich mir das Ausgeben lasse

*1205--::^--:0.^0	

*Es soll aber aus 1205 -> 12.05 entstehen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

das COMP-3 darf dich innerhalb deines Programmes gar nicht stören, es geht nur darum wie die Daten auf dem Datenträger gespeichert werden, hier mit dem COMP-3, zumindest ist das mein Wissenstand.

Als Lösung könnte ein REDEFINE helfen, weiß jetzt aber die Syntax nicht genau.

Sieht glaub ich so aus:


*FELD1 enthält ein Datum im Format MMJJ

 01  FELD1	PIC 9(4) COMP-3.

*PACKED-DECIMAL = COMP-3.

 01  FELD2 [COLOR="Red"]REDEFINE FELD1[/COLOR].

     05  FELD2-MM	PIC 99.

     05  FILLER    	PIC X VALUE '.'.

     05  FELD2-JJ	PIC 99.

*FELD2 soll das Datum im Format MM.JJ ausgeben		

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo ist ja auch keine Wunder. Du machst doch genau das Selbe wie am Anfang bei deiner Problembeschreibung ;)

Feld3 muss so definiert sein:

01 Feld3 pic 9(4).

Du hast doch soagr in deinem Code schon kommentiert das Feld1 gepackt ist. Also kannst du doch nicht aus dem gepacktem Format einfach die Stellen einzeln umschieben.

@Maulwurf

Nein ein Redefine bringt dir nichts weil die Felder unterschiedliche Größen haben. Feld1 hat 4 Stellen und Feld 2 5.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das mit dem REDIFINES hat nicht so gelappt. Ich habe mir inzwischen was zusammengebaut was geht.


*FELD1 enthält ein Datum im Format MMJJ

 01  FELD1	PIC 9(4) COMP-3.

*PACKED-DECIMAL = COMP-3.

 01  FELD2.

     05  FELD2-MM	PIC 99.

     05  FILLER    	PIC X VALUE '.'.

     05  FELD2-JJ	PIC 99.

*FELD2 soll das Datum im Format MM.JJ ausgeben	

 01  FELD3		PIC 9(4).

*…

 MOVE FELD1 TO FELD3

 MOVE FELD3(1:2) 	TO FELD2-MM

 MOVE FELD3(3:2)	TO FELD2-JJ

*jetzt ein Display für die Ausgabe

 DISPLAY FELD1 '--' FELD3 '--' FELD2

Da kommt das das gewünschte Ergebnis bei raus. Ich verstehe nur nicht so ganz wieso ich das gepackte Feld nicht in eine Datengruppe schieben kann. Jetzt schiebe ich es ja in ein 4stelliges Numerisches Feld und zerschneide es dann. Wieso kann aber mein Zwischenfeld nicht so aus sehen:

01  FELD3.

     05 FELD3-MM	PIC 99.

     05 FELD3-JJ	PIC 99.

EDIT: Danke für die Antworten da war ich nur etwas langsam beim schreiben habe es wie oben beschrieben inzwischen gemacht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

In dem gepacktem Feld steht bei deinem Beispiel ja nicht 1205 so drin sondern es ist gepackt ( ;) ). Es könnte zum Beispiel so aussehen .-(_ (nur als Beispiel!) und wenn du das dann entsprechend entpackst kommt da 1205 raus.

Schiebst du jetzt die ersten beiden Stellen also .- in eine andere Varible gibt das aber nicht 12 sondern irgendwas anderes was du ja bei deiner Ausgabe gesehen hast da das gepackte ja nicht komplett ist.

Also musst du erst das gesammte umkopieren damit es entpackt wird und dann kannst du damit weiterarbeiten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiß nicht ob ichs überlesen habe, reden wir von IBM oder vom SIEMENS ??

Das die Felder unterschiedlich groß sind ist hier egal, da FILLER nicht befüllt werden. So werden die 4 Zahlen auf 2 Zahlen . 2 Zahlen aufgeteilt.

Das is doch grad das schöne an COBOL, du kannst aus 01012006 einfach 01.01.2006 machen, ohne irgendwelche Funktionen.

// Meine Meinung beruht auf einem SIEMENS System, ist durchaus möglich das es auf nem IBM System so nicht geht //

-> Edit:

wenn du das gepackte feld1 Pic 9(4) com-3 in ein feld2 Pic 9(4) schiebst und feld3 redefines feld2 machst, geht das dann??

<- Edit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe jetzt noch mal ein wenig rum probiert. Wenn ich ein MOVE von FELD3 nach FELD2 mache wird bei mir der FILLER überschreiben. Wir haben hier eine COBOL Version von IBM.

Ich habe jetzt auch verstanden weshalb ich ein gepacktes Feld nicht in eine Datengruppe schieben kann. So wie du es beschrieben hast Guybrush Threepwood macht es ja auch durchaus sinn.

Werde es nun bei der Lösung belassen die ich in Post #6 geschrieben habe.

Nochmals Danke an alle die sich dem Problem angenommen haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo nochmal,

mittlerweile glaub ich das es nicht geht, so wie ich geschrieben habe.

Habs jetzt versucht aber es haut einfach nicht hin.

Mir will aber das Gefühl nicht weggehen das es da ein ganz simple lösung gibt.

Wenn sie mir einfällt dann poste ich sie hier :)

Fürs Protokoll:

Gut ich hatte nicht recht und gestehe meine Schuld ein :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...

Hallo,

ich weiß der Thread ist schon etwas älter, doch ich hab noch eine möglichkeit gefunden wie man die gepackten Feldern umgeht z.B. aus 251105 25.11.05 zu machen.


...
## in working-storage section
01 datum-1 pic x(06) comp-3.
## folgendes wird hinzugefügt damit ein zugriff erfolgen kann
01 datum-2 pic x(06)
01 datum-3.
10 dat-tt pic x(02).
10 filler pix x(01) value ".".
10 dat-mm pic x(02).
10 filler pix x(01) value ".".
10 dat-jj pic x(02).
....
## in procedure devision
....
move datum-1 to datum-2.
move datum-2 to datum-3.
....
## ausgabe
display datum-3
....
[/PHP]

Erklärung:

Zuerst muss das comp3 weg erster move.

Danach muss man das Felder unterteilen, zweiter move.

Jetzt nur noch ausgeben.

btw. oben hab ich ## verwendet damit man in php die kommentare besser erkennt. natülich muss in cobol ein Stern am rechten Fleck stehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...