[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    gepackte Zahl aus String holen

    Hi Profis,

    gibt es eine 'einfache' Möglichkeit eine gepackte Zahl numerisch aus einem string zu holen?

    Ich habe : einen String, 128 byte
    Die Startpos. des gepack Numerischen Felders,
    Die Endepos. des gepackt Numerischen Feldes sowie
    die Anzahl Nachkommastellen

    Das ganze soll in ein 15,6 Feld Numerisch

    einer ne Idee
    Danke
    ILEMax

  2. #2
    Registriert seit
    Apr 2005
    Beiträge
    385
    Du könntest versuchen, eine DS darüber zu legen und die stelle von/bis als Packed-Zahl zu definieren.

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Sofern die Position des gepackten Feldes immer gleich ist, ist eine Datenstruktur die einfachste Lösung.

    Eine andere Lösung wäre, den String in Hex zu konvertieren, die numerischen Werte mittels Substring zu selektieren und in das entsprechende Format konvertieren.

    Mit der SQL-Funktion HEX können die HEX-Werte ermittelt werden.

    Bei dieser Methode ist allerdings darauf zu achten, dass im letzten Halbbyte das Vorzeichen ausgegeben wird (F/D). Dieses Vorzeichen muss richtig interpretiert werden.

    Birgitta
    Birgitta Hauser

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

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    393
    Eine DS drüber geht nicht, da der String sich 150 - 200 mal ändert und immer andere Startpos / Längen hat.

    @B.Hauser
    Wie meinst du das mit
    den String in Hex zu konvertieren, die numerischen Werte mittels Substring zu selektieren und in das entsprechende Format konvertieren.
    %subst(Hexstring:1:länge-1) muß ich wie konvertieren ?
    Gruß
    Euer ILEMax

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... geht nicht gibts nicht!

    Code:
    d huddle          ds                  qualified               
    d maybePacked             1      8p 6                         
    d modder          s              8    inz(x'0000000000000000')
     /free                                                        
             monitor;                                             
                huddle = %subst(shudder:start:length);
                  // Glück gehabt, jetzt stehts in huddle.maybePacked drin
             on-error; 
                 // das konnt ja nix werden                                           
             endmon;                                              
     /end-free
    wenn shudder zu kurz ist, muss man links noch die passende Länge modder davor pappen.

    D*B

    der schon wieder mit Brechreiz kämpfen muss

    Zitat Zitat von ILEMax Beitrag anzeigen
    Eine DS drüber geht nicht, da der String sich 150 - 200 mal ändert und immer andere Startpos / Längen hat.

    @B.Hauser
    Wie meinst du das mit
    %subst(Hexstring:1:länge-1) muß ich wie konvertieren ?
    Gruß
    Euer ILEMax
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    393
    Kurze Erläuterung zum Prob.
    ich bekomme demnächst mind. 150 unterschiedliche Dateien geliefert.
    Der Aufbau ist ein String
    Zu jeder Datei gibt es eine Zusatz Datei
    die quasi die interne DDS ist.
    Jede Datei ist immer wieder anders.
    Ich wollte erst aus der 'quasi DDS' eine DS machen und immer das PGM zur Laufzeit neu wandeln, das darf ich aber so nicht lösen. Ich soll die Feldinhalte so aus dem String holen.

    daher ...
    Wenn ich davon ausgehe das mein String in shudder steht, wofür brauch ich dann modder ?

    Gruß
    Max

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... wenn das Feld in shudder immer die "richtige" Länge hat, brauchst du das nicht;
    D*B
    Zitat Zitat von ILEMax Beitrag anzeigen
    Kurze Erläuterung zum Prob.
    ich bekomme demnächst mind. 150 unterschiedliche Dateien geliefert.
    Der Aufbau ist ein String
    Zu jeder Datei gibt es eine Zusatz Datei
    die quasi die interne DDS ist.
    Jede Datei ist immer wieder anders.
    Ich wollte erst aus der 'quasi DDS' eine DS machen und immer das PGM zur Laufzeit neu wandeln, das darf ich aber so nicht lösen. Ich soll die Feldinhalte so aus dem String holen.

    daher ...
    Wenn ich davon ausgehe das mein String in shudder steht, wofür brauch ich dann modder ?

    Gruß
    Max
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    393
    Das Feld in shudder ist alles mögliche.
    daher kann ich mit der 'richtigen' länge z.zt. nix anfangen.

    Von 1 bis 15 ist alles möglich (ja wirklich, 1 Stelle gepackt gibt es !)
    Muß ich dann huddle1 bis huddle8 definieren mit der Unterdefinition 1 1 p,
    1 2 p ... bis 1 8 p ?

    nochmal Danke
    Max

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... deswegen heißt das ja shudder, aber du muss ja zumindest wissen wie lang (in Byte) das entsprechende Feld ist:
    huddle = %subst(modder:1:8-length)
    + %subst(shudder:start:length);
    D*B

    Zitat Zitat von ILEMax Beitrag anzeigen
    Das Feld in shudder ist alles mögliche.
    daher kann ich mit der 'richtigen' länge z.zt. nix anfangen.

    Von 1 bis 15 ist alles möglich (ja wirklich, 1 Stelle gepackt gibt es !)
    Muß ich dann huddle1 bis huddle8 definieren mit der Unterdefinition 1 1 p,
    1 2 p ... bis 1 8 p ?

    nochmal Danke
    Max
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    393
    Ok, danke, das versuch ich
    super.
    Schönen Jahreswechsel
    (an alle )

    Euer
    ILEMax

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von ILEMax Beitrag anzeigen
    @B.Hauser
    Wie meinst du das mit
    %subst(Hexstring:1:länge-1) muß ich wie konvertieren ?
    Gruß
    Euer ILEMax
    z.B. so:

    Code:
     /Free
        Exec SQL Set :MyHexString = substr(Hex(:MyString), StartPos*2, Laenge*2-1);
     /End-Free
    Birgitta
    Birgitta Hauser

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

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Vielleicht so, aber ohne Gewähr!
    PHP-Code:
    DALPHA            DS                                                   
    DPACK0                          15P 0                                  
    DPACK1                          15P 1 OVERLAY
    (PACK0)                   
    DPACK2                          15P 2 OVERLAY(PACK0)                   
    DPACK3                          15P 3 OVERLAY(PACK0)                   
    DPACK4                          15P 4 OVERLAY(PACK0)                   
    DPACK5                          15P 5 OVERLAY(PACK0)                   
    DPACK6                          15P 6 OVERLAY(PACK0)                   
    DPACK             S             15P 6 INZ                              
    DHEX0             S                   INZ
    (*ALLX'00'LIKE(ALPHA)       
    DTEXT             S            128A   INZ(X'ABCDEF987654321DEF')       
    DSTART            S              5P 0 INZ(4)                           
    DLEN              S              1P 0 INZ(5)                           
    DNK               S              1P 0 INZ(2)                           
    D                                                                      
    C                   
    EVAL      ALPHA = %SUBST(HEX0:1:%LEN(ALPHA)-LEN)   
    C                                   + %SUBST(TEXT:START)               
    C                   SELECT                                             
    C     NK            WHENEQ    0                                        
    C     
    *ZERO         ADD       PACK0         PACK                       
    C     NK            WHENEQ    1                                        
    C     
    *ZERO         ADD       PACK1         PACK                       
    C     NK            WHENEQ    2                                        
    C     
    *ZERO         ADD       PACK2         PACK                       
    C     NK            WHENEQ    3                                        
    C     
    *ZERO         ADD       PACK3         PACK                       
    C     NK            WHENEQ    4                                        
    C     
    *ZERO         ADD       PACK4         PACK                       
    C     NK            WHENEQ    5                                        
    C     
    *ZERO         ADD       PACK5         PACK                       
    C     NK            WHENEQ    6                                        
    C     
    *ZERO         ADD       PACK6         PACK                       
    C                   OTHER                                              
    C                   MOVE      
    *ZERO         PACK                       
    C                   ENDSL                                              
    C                   SETON                                        LR 

Similar Threads

  1. String mit Returns in iSeries Datenfeld speichern
    By e_sichert in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 07-11-06, 15:25
  2. String zusammenstellen
    By edig in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 07-07-06, 10:51
  3. Systemdatum nach String
    By codierknecht in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 03-07-06, 15:25
  4. Antworten: 1
    Letzter Beitrag: 24-04-06, 10:37
  5. COBOL: String mit Zahl comp-4
    By rebe in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 19-05-05, 16:34

Berechtigungen

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