[Allegro] Trick 73: Datum in die richtige Form bringen

Bernhard Eversberg ev at biblio.tu-bs.de
Do Jun 11 09:58:13 CEST 2009


Trick 73:  Datumsverdruß
            Schlechte Datumsangaben standardisieren

Immer mal wieder kommt Mißmut auf über unstandardgemäße Datumsangaben!
Da steht in einem Feld sowas wie  3.10.98 oder 10-03-01, man braucht
aber 19981003 bzw. 20010310.

Die schlechte Nachricht: Man kann kein Programm schreiben, das _jede_
Form von Datum standardisieren könnte. Denn es ist ja auch möglich,
daß  10-03-01  in Wahrheit 20100301 bedeutet! Oder daß  04/09/2009
amerikanisch gemeint ist und  20090409  heißen soll.

Wenn es aber so ist, daß die Datumsangaben alle von derselben Struktur
sind, also etwa  TT.MM.JJJJ, dann läßt sich was machen. Es gibt ein
allgemeines Rezept, das man für andere Fälle leicht modifizieren kann:

Sagen wir mal, die konkrete Aufgabe lautet so:
In #999 steht immer etwas von der Struktur  TT.MM.JJJJ, und
es soll daraus eine #99n werden mit JJJJMMTT. Und als Besonderheit
kann TT bzw. MM auch einstellig sein, also z.B. 1.2.1999.
Hinter dem Datum könnte auch noch etwas stehen, was dann verschwinden
soll.
Die #999 soll dann weg. Die Umwandlung soll auf die gesamte Datenbank
angewendet werden.

Hier der komplette FLEX:

first #
:loop
   Die Zahlen umordnen, 1stellige nach rechts ruecken
var #999(b"." b"." e" " 0,r4) #999(b"." e"." 0,r2) #999(e"." 0,r2)
   Leerzeichen durch 0 ersetzen, Ergebnis nach #99n
ins _ _0_
ins #99n
   und weg mit der #999, Satz speichern
#999
put
:weiter
next #
if cancel jump ende
   geloeschte Saetze nicht behandeln!
if del jump weiter
if yes jump loop
:ende
mes Uff, erledigt!


Die Zeile mit "var" ist diejenige, die aus dem vorgegebenen Datum die
richtige Struktur macht. Diese muß man bei einer anderen Vorgabe dann
entsprechend ändern, u.U. wird's schwieriger als in diesem Fall!

Der Trick liegt hier in dem Manipulationsbefehl 0,r2, der bei den
Zahlen für Monat und Tag angewendet wird. Damit rückt man eine
einstellige Zahl nach rechts, so daß sich zwei Stellen ergeben.
Leider ist die erste dann ein Leerzeichen. Man erhält also aus
1.2.1998 dann   1998 2 1.  Hm, was nun?
Der zweite Trick ist der Befehl  ins _ _0_, der die Leerzeichen im
iV-Text durch Nullen ersetzt. Und das war's dann.
Der Rest ist die normale Vorgehensweise, wenn man die Gesamtbank
durcharbeiten will. (S. Beisp. 3 in der Doku zu next: h xnext)

Tip: Das "put" weglassen, wenn man nach dem Durchlauf erst nochmal
schauen will, ob's denn gut geklappt hat. Danach dann in dem Memü
"Datei" die Funktion "Alle bearb. Daten speichern" aktivieren.

Ist statt der Gesamtbank nur eine Erg.Menge abzuarbeiten, läßt man
das Zeichen # bei first und next weg.



(20090611)




Mehr Informationen über die Mailingliste Allegro