Cobol, ja Cobol. Eine Frage

Ich habe zwei Datumsfelder:

  1. 25.05.04
  2. 08.1999

Jetzt muss ich die beiden vergleichen,
ob das eine auch kleiner dem anderen Datum ist.

Dazu bringe ich beide in die gleiche Form und
schon kann ich Sie vergleichen?
Woher weiss der Compiler, das ein datum größer/kleiner dem anderen ist, da die Variablen doch als Char definiert sind?

Danke für Rat!!!

Grüße
Carolin

Hallo Carolin

Ich habe zwei Datumsfelder:

  1. 25.05.04
  2. 08.1999
    Jetzt muss ich die beiden vergleichen,
    ob das eine auch kleiner dem anderen Datum ist.
    Dazu bringe ich beide in die gleiche Form und
    schon kann ich Sie vergleichen?

Genau, also z.B. so:
25.05.04 -> 2004.05.25
08.1999 -> 1999.08.01

Woher weiss der Compiler, das ein datum größer/kleiner dem
anderen ist, da die Variablen doch als Char definiert sind?

Der Compiler „weiss“ das nicht, die Werte werden einfach alphanumerisch verglichen (entsprechend ihrem Datentyp). Wenn du sie beide in das Format „JJJJ.MM.TT“ bringst, funktioniert das auch prima.

Danke für Rat!!!

Nur geraten… das letzte mal habe ich vor ca. 10 Jahren in Cobol programmiert :wink:
(Aber das Geschriebene ist wohl allgemeingültig.)

Gruss
Peter

Danke!
Jetzt erinnere auch ich mich wieder,
obwohl es noch keine 10 Jahre her ist…

Danke!

Gruß
Caro

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Du kannst die beiden Felder auch rein numerisch (Workaround)
vergleichen. Im anderen Fall (Char-variante) prüft der Compiler
lediglich welche Werte ascii-mäßig größer oder kleiner sind. Und da
die 2 in der ASCII-Tabelle nach der 1 kommt, ist der Wert auch
größer-
Du definierst einfach folgendes

01 Datum-G.
05 Datum-Jahr.
10 Datum-JH PIC 99.
10 Datum-JJ PIC 99.
05 Datum-Monat PIC 99.
05 Datum-Tag PIC 99.
01 Num-Datum1 PIC 9(8).
01 Num-Datum2 PIC 9(8).

MOVE Tag TO Datum-Tag
MOVE Monat TO Datum-Monat
MOVE Jahr TO Datum-Jahr

* Ist nur beim ersten Datum wichtig, funktioniert aber auch wenn
* beide Daten über die oben definierte Struktur in die Variablen
* Num-Datum1 und Num-Datum2 konvertiert werden
IF Datum-JJ [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]