[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2010
    Beiträge
    31

    daten typ einer Datenstruktur ändern

    Hallo *all,

    ich habe zwei DS mit unterschiedlichen Datentyp, deren Inhalt ich von DS1 -> DS2 übergeben möchte. Wie kann ich dass am Besten machen ohne jedes einzelne Feld anzupassen??? Gibt es da eine schöne möglichkeit?

    D DS1 DS
    D feld1 1 30a
    D feld2 31 60a
    D feld3 91 100a
    D feldn 150 160a
    D stringds1 200a Overlay(ds1)

    D DS2 DS
    D feld1 1 30c
    D feld2 31 60c
    D feld3 91 100c
    D feldn 150 160c
    D stringds2 200c Overlay(ds2)

    Danke!

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ab V5R4 gäbe es ja den Eval-Corr Befehl. Allerdings müssten dafür der Feldname + Typ übereinstimmen.
    Du könntest mit dem Befehl MOVEL die DS1 in die DS2 schieben.
    Mit MOVE-Befehle arbeiten zu müssen würde ich jedoch nicht unbedingt als schöne Lösung bezeichnen.

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.306
    Da du den Typ nur von SBCS (A) in UCS2 (C) ändern möchtest kannst du den Move hin und zurück so codieren:

    DS1 = %char(DS2);
    DS2 = % UCS2(DS1);
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.882
    Bist Du Dir eigentlich sicher, dass Du in der 2. Datenstruktur alle Zeichen aus der 1. Datenstrukutr unterbringst?
    M.E. sind die Felder nur noch halb so lang, da für ein Zeichen 2 Byte anstatt 1 Byte benötigt werden.

    Die Sub-Felder mit Von-/Bis-Angaben zu definieren, sollten die Felder mit Länge und dem entsprechenden Datentypen definiert werden.

    Wenn Du bereits auf 6.1. sollte ein einfacher Eval (besser allerding EVAL-CORR) genügen. EVAL-CORR setzt allerdings voraus, dass die Datenstrukturen qualifiziert angesprochen werden und alle Unter-Felder gleich heißen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Jan 2010
    Beiträge
    31
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Da du den Typ nur von SBCS (A) in UCS2 (C) ändern möchtest kannst du den Move hin und zurück so codieren:

    DS1 = %char(DS2);
    DS2 = % UCS2(DS1);
    DS2 = %UCS2(DS1), wenn ich das versuche, dann sind die Inhalt der DS2 nicht mehr lesbar. die AS400 zeigt mir dann nur noch Striche an.

    Gruß,
    inchic

  6. #6
    Registriert seit
    Jan 2010
    Beiträge
    31
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Bist Du Dir eigentlich sicher, dass Du in der 2. Datenstruktur alle Zeichen aus der 1. Datenstrukutr unterbringst?
    M.E. sind die Felder nur noch halb so lang, da für ein Zeichen 2 Byte anstatt 1 Byte benötigt werden.

    Die Sub-Felder mit Von-/Bis-Angaben zu definieren, sollten die Felder mit Länge und dem entsprechenden Datentypen definiert werden.

    Wenn Du bereits auf 6.1. sollte ein einfacher Eval (besser allerding EVAL-CORR) genügen. EVAL-CORR setzt allerdings voraus, dass die Datenstrukturen qualifiziert angesprochen werden und alle Unter-Felder gleich heißen.

    Birgitta
    das habe ich jetzt auch versucht, leider akzeptiert er die unterschiedlichen Datentypen nicht.

    D DS2 E DS EXTNAME(DS2:*INPUT) QUALIFIED
    D DS2 E DS EXTNAME(DS:*OUTPUT) QUALIFIED

    Eval-corr ds2 = ds2;

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.306
    Um einen Einzel-Move kommst du wohl nicht herum:
    1. UCS2 läßt sich auf einer DS leider nicht definieren
    2. MOVE und EVAL nehmen keine automatische Konvertierung vor, deshalb der Compilerfehler

    Was die Definition angeht, so sind c-Felder automatisch Doppelbytes.
    Du musst also für die Übertragung gezielt jedes Feld mit Konvertierung übertragen (qualified):

    ds2.feld1 = %ucs2(ds1.feld1);
    ds1.feld1 = %char(ds2.feld1);

    Nachtrag:
    Du kannst natürlich nicht 2 gleiche DS-Namen definieren (2x DS2).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Jan 2010
    Beiträge
    31
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Um einen Einzel-Move kommst du wohl nicht herum:
    1. UCS2 läßt sich auf einer DS leider nicht definieren
    2. MOVE und EVAL nehmen keine automatische Konvertierung vor, deshalb der Compilerfehler

    Was die Definition angeht, so sind c-Felder automatisch Doppelbytes.
    Du musst also für die Übertragung gezielt jedes Feld mit Konvertierung übertragen (qualified):

    ds2.feld1 = %ucs2(ds1.feld1);
    ds1.feld1 = %char(ds2.feld1);

    Nachtrag:
    Du kannst natürlich nicht 2 gleiche DS-Namen definieren (2x DS2).

    DANKESCHÖN.
    Ich habe hofft, dass ich das einzelene Übertragen meiden könnte.
    DANKE!

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.306
    Ich habs noch mal unter V5R4 getestet:
    %UCS2 und %CHAR werden auf DS nicht korrekt unterstützt.
    Da die DS als Ziel wieder vom Typ SBCS ist, führt der DS2 = % UCS2(DS1) zu einer Rückkonvertierung in CHAR und macht deshalb den Unterfeldinhalt nicht lesbar, da er kein UCS2 mehr ist.
    Ein DS1 = % CHAR(DS2) wird vom Compiler abgelehnt.

    Der Test hat auch ergeben, dass man sich ab V5R4 wohl die Funktionen % UCS2 und % CHAR beim Eval sparen kann, der Compiler generiert den richtigen Code automatisch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.295
    ... du hast doch schon die Huddelfelder mit Overlay deklariert, da kannst du doch dem einen Huddelfeld das andere Huddelfeld zuweisen (würg, schüttel, kotz) , bzw. mit %ucs zuweisen, je nach release.

    D*B,
    den der Ekel schon beim schreiben packt
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.306
    ts, ts, dass ich das übersehen habe
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.295
    ... spricht für dich und lässt hoffen...

    Zitat Zitat von Fuerchau Beitrag anzeigen
    ts, ts, dass ich das übersehen habe
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Antworten: 6
    Letzter Beitrag: 26-07-06, 12:22
  2. Datenstruktur
    By Bratmaxxe in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 24-07-06, 13:25
  3. IFS Datei Daten hinzufügen
    By sim in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 18-05-06, 08:00
  4. Antworten: 1
    Letzter Beitrag: 24-04-06, 10:37
  5. Daten Import Tool + Dublettensuche für i5 CRM
    By Heinz Molter in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 31-08-04, 09:48

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •