Schiller256 Geschrieben 8. Februar 2006 Teilen Geschrieben 8. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 8. Februar 2006 Teilen Geschrieben 8. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 9. Februar 2006 Autor Teilen Geschrieben 9. Februar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 9. Februar 2006 Autor Teilen Geschrieben 9. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 Schiller256 hat doch geschrieben das es mit dem Redefines nicht geht. Habs zwar selbst noch nicht probiert, aber wenn du einfach ein move "blabla" to Feld2 machst wird der filler überschrieben und deshalb gehe ich einfach mal davon aus das Schiller256 recht hat und es nicht geht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 ok, kann sein das ich mich irre werds hernach mal ausprobieren, ist wahrscheinlich das beste -> Spass <- nur fürs protokoll ich will aber recht haben -> Spass <- Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schiller256 Geschrieben 9. Februar 2006 Autor Teilen Geschrieben 9. Februar 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 9. Februar 2006 Teilen Geschrieben 9. Februar 2006 In Cobol gibt es für so gut wie nix ne einfache Lösung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maulwurf_der_Schlaue Geschrieben 17. Mai 2006 Teilen Geschrieben 17. Mai 2006 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.