[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2
  1. #13
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Zitat Zitat von BenderD Beitrag anzeigen
    Den Knast in den Variablennamen sollte man sich verkneifen, §$&# und Konsorten gehören zu den Zeichen, die im EBCDIC nicht konsistent übertragen werden, was im internationalen Umfeld zu Problemen führen kann.
    D*B
    Da hast du sicher recht. Allerdings ist das bei uns aus den Sourcen nicht mehr rauszukriegen. Ich schätze, dass es hunderttausende Programmstellen gibt, in denen ein # vorkommt. Da kann uns wohl nur ein Roboter weiterhelfen.

  2. #14
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Zitat Zitat von Rainer Ross Beitrag anzeigen
    Ich werfe aufgrund der Anregung von Baldur noch eine Idee für "total" und "fully" free in den Hut
    Code:
                   ctl-opt main(main) dftactgrp(*no) option(*nounref);                                                            
          //------------------------------------------------------------------//                                            
          //                                                                  //                                            
          // Convert Zoned to Packed from String                              //                                            
          //                                                                  //                                            
          //-----------------                                                 //                                            
          // R.Ross 06.2017 *                                                 //                                            
          //------------------------------------------------------------------//                                            
          // Main                                                             //                                            
          //------------------------------------------------------------------//                                            
             dcl-proc Main;                                                                                                 
                                                                                                                            
             dcl-s   LocString   varchar(30);             // String                                                         
             dcl-s   LocNumber   packed(11:2);            // Number                                                         
                                                                                                                            
               LocString = '000005843M';                                                                                    
               LocNumber = cvtZonedToPacked(LocString:2);                                                                   
                                                                                                                            
             end-proc;                                                                                                      
          //------------------------------------------------------------------//                                            
          // Convert Zoned to Packed from String                              //                                            
          //------------------------------------------------------------------//                                            
             dcl-proc cvtZonedToPacked;                                                                                     
             dcl-pi *n           like(LocNumber);                                                                           
                     PiString    varchar(30) const options(*varsize:*trim);                                                 
                     PiDecimals  uns(5)      const options(*nopass);                                                        
             end-pi;                                                                                                        
                                                                                                                            
             dcl-ds  PsString    qualified;                                                                                 
                      String     char(30);                                                                                  
                      Number     zoned(30) pos(01);                                                                         
             end-ds;                                                                                                        
                                                                                                                            
             dcl-s   LocNumber   packed(30:9);            // Number                                                         
                                                                                                                            
               evalr PsString.String = PiString;                                                                            
               LocNumber = PsString.Number;                                                                                 
                                                                                                                            
               if %parms >= %parmnum(PiDecimals);         // Decimals                                                       
                  LocNumber /= 10 ** PiDecimals;          // Decimals                                                       
               endif;                                                                                                       
                                                                                                                            
               return LocNumber;                          // Number                                                         
                                                                                                                            
             end-proc;                                                                                                      
          //------------------------------------------------------------------//
    Bist du sicher, dass das geht? Wenn dein varying - Input-Parameter kürzer als 30 Zeichen ist, würden in der Datenstruktur doch zunächst Leerzeichen und am Ende deine gezonte Ziffernfolge stehen, oder? Wird das dann zu einer 30 Stelligen-Zahl? Der evalr würde doch das Feld zunächst mit Blanks initialisieren und dann rechtsbündig deinen (ggf. kürzeren) String reinpacken. Müssen da keine Vornullen rein?

  3. #15
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Dieter,
    ich habe es getestet, es funktioniert.

    Rainer

  4. #16
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Beim MOVEL steht genaueres (bei Feldern gleicher Länge):

    If factor 2 is character and the result field is numeric, a minus zone is moved into the rightmost position of the result field if the zone from the rightmost position of factor 2 is a hexadecimal D (minus zone). However, if the zone from the rightmost position of factor 2 is not a hexadecimal D, a positive zone is moved into the rightmost position of the result field. Digit portions are converted to their corresponding numeric characters. If the digit portions are not valid digits, a data exception error occurs.
    Und hier der Zeichensatz EBCDIC 273 (deutsch).

Similar Threads

  1. Binary in Packed.
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 12-05-17, 14:29
  2. PDF in spool file umwandeln
    By Icke in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 06-07-14, 17:02
  3. Berechtigung zum Umwandeln einschränken
    By Wolfgang Scheureder in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 22-02-03, 10:56
  4. Umwandeln ILE RPG Programm
    By alex in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 06-08-02, 07:13
  5. Spoolfiles in PDF umwandeln
    By Blank in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 07-03-02, 14:30

Berechtigungen

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