Du hast da leider tatsächlich ein Problem, da die Quelldaten in LE (Little Endian) gespeichert wird und die AS/400 in Big Endian arbeitet (LE "0" = X'3000', BE "0" = X'0030').
Für SQL gibts nur den Translate.
Mangels Daten habe ich es noch nicht ausprobiert, aber versuche doch fogendes:
dcl-f MyFile Usage(*Input: *Update) ; // Daten vom externen Partner
// Konstanten dcl-c True *On; dcl-c False *Off;
// Main-Programm Setll *Start MyFile; // Alles auf Anfang Read MyFile; // 1.Satz lesen DoW not %EoF( MyFile ); // Lesen bis zum bitteren Ende Satz = Gueltige_Zeichen( Satz ); // Nur Blanks und Ziffern bleiben Update MyFileF; // Update auf den Record Read MyFile; // Und ab zum nächsten Record EndDo; // Ende der Schleife
*Inlr = True; // Endezeiger einschalten
// Prozeduren dcl-proc Gueltige_Zeichen; // Alles töten was nicht x'40' oder dcl-pi *n char( 80 ); // x'F0' bis x'F9' ist Zeile char( 80 ); // Übergabe des String end-pi; dcl-s Rueckgabe char( 80 ); // Rückgabe_String dcl-s Text char( 80 ); // Hier gibt es den Übergabe Text dcl-s Zeichen char( 1 ); // Zu überprüfendes Zeichen dcl-s Index packed( 4: 0 ); // Index für Zerlegen des Strings Text = Zeile; // Erstmal den ganzen Text For Index = 1 to %Len( %Trim( Text )); // Alles durch ackern Zeichen = %SubSt( Text : Index: 1); // zu prüfendes Zeichen If Zeichen = x'40'; // Leerzeichen Rueckgabe = %Trim( Rueckgabe ) + 'Q'; // Platzhalter für das Blank EndIf; If (Zeichen >= x'F0' and Zeichen <= x'F9'); // Ziffer Rueckgabe = %Trim( Rueckgabe ) + Zeichen; // Zeichen geht mit zurück EndIf; EndFor; // Platzhalter wieder mit Blanks ersetzen Rueckgabe = %ScanRpl( 'Q': ' ': Rueckgabe); // Und das Ergebniss zurück geben Return Rueckgabe; end-proc;
Ich, als alter Nostalgiker ... dies ist eine RPG variante, das F in der 'H-Karte' ist das Geheimnis
Code:
H .D F HEXJO
FINPUT IP F 250 DISK
FOUTPUT O F 250 DISK A
I* ----------------------------------------------------------------------
IINPUT KF 01
I 1 250 S1
OOUTPUT DADD 01
O S1 250
**
INPUT 00400140024003400440054006400740084009400A400B400C400D400E400F40
INPUT immer althex neuhex, sooft wie nötig
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
Bookmarks