[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2015
    Beiträge
    5
    Hi Fuerchau,

    ich danke dir für deine Antwort, hat zwar mein Problem nicht gelöst aber hat mir eine Idee gezeigt, wie ich es lösen soll.

    Ich habe es in CLLE gemacht, weil in CL mit Pointers besser arbeiten kann:

    Code:
    CALLPRC PRC('strstr') PARM((&strstr_st1 *BYVAL)  +      
                               (&strstr_st2 *BYVAL)) +      
            RTNVAL(&strstr_fnd)                             
    IF COND(&strstr_fnd *EQ *NULL) THEN(DO)                 
       CALLSUBR doENDPGM                                    
    ENDDO                                                   
                                                            
    CHGVAR &strstr_off (%OFS(&strstr_fnd)-%OFS(&strstr_st1))
    Nochmals danke.

  2. #2
    Registriert seit
    Aug 2014
    Beiträge
    179
    Im neuen all-free RPG gehts auch. Es macht Sinn bei Variablen größer als 16MB, wo der %scan nicht mehr funktioniert. Beispielsweise bei Files aus dem IFS.
    PHP-Code:
     dcl-pr strstr         pointer extproc(*dclcase);
              
    ##string     pointer value options(*string);
              ##pattern    pointer value options(*string);
     
    end-pr;

     
    dcl-s   string      varchar(60);             // String
     
    dcl-s   pattern     varchar(20);             // Pattern
     
    dcl-s   result_p    pointer;                 // Result-Pointer
     
    dcl-s   pos         int(10);                 // Position

          
    string  'das ist ein toller text';
          
    pattern 'toll';

          
    result_p strstr(%addr(string:*data):%addr(pattern:*data));

          if 
    result_p <> *null;                        // Result-Pointer
             
    pos result_p - %addr(string:*data) + 1// Position im String
          
    endif; 
    Herzliche Grüße

    Rainer

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.251
    Variablen >16MB sind im *SNGLVL-Storage nicht möglich. Die Wahrscheinlichkeit dass 2 16MB-Bereiche direkt hintereinander liegen ist nicht gewährleistet.
    Du kannst dein Speichermodel auf *TERASPACE umstellen, dann sind Variablen >16MB möglich und der %SCAN sollte eigentlich wieder funktionieren.
    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 2014
    Beiträge
    179
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Variablen >16MB sind im *SNGLVL-Storage nicht möglich. Die Wahrscheinlichkeit dass 2 16MB-Bereiche direkt hintereinander liegen ist nicht gewährleistet.
    Du kannst dein Speichermodel auf *TERASPACE umstellen, dann sind Variablen >16MB möglich und der %SCAN sollte eigentlich wieder funktionieren.
    danke für den Hinweis

    PHP-Code:
      ctl-opt dftactgrp(*noalloc(*teraspace); 

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    ctl-opt dftactgrp(*no) alloc(*teraspace);

    Nur mal so aus Interesse: Reicht es, alloc(*teraspace) einfach so deklarieren? Oder muss das Programm in einer bestimmten Activation Group ausgeführt werden? Bei uns läuft standardmäßig alles in ACTGRP(*CALLER).

    Sind besondere Wandlungsoptionen auch noch erforderlich?

    Dieter

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.251
    Nun ja, besser ist das schon.
    Ich weiß nicht, was bei ACTGRP(*CALLER) passiert.
    Im Zweifel ist ein Aufruf nicht möglich, wenn die ACTGRP bereits für *SNGLVL initialisiert ist.
    Da ich keine Lust habe das zu testen, probier es doch einfach mal aus.

    Was Pointer-Differenz in COBOL angeht, so kann man den Pointer redefinieren mit einer Struktur Filler x(10) und 9(9) comp-4 (Wichtig kein S!), ggf. geht auch 9(9) comp-5.
    Somit kann man die Differenz zweier Pointer zumindest im Speicher berechnen.
    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

  7. #7
    Registriert seit
    Feb 2015
    Beiträge
    5
    Hi Fuerchau,

    genau das ist Antwort auf meine Frage! Super, ich danke dir.

    Nur kleine Anpassung: FILLER muss X(12), weil die numerische Variable 9(9) BINARY ist 4Bytes groß und insgesamt muss es 16Bytes sein, weil Pointers 16Bytes allozieren.

    Code:
           IDENTIFICATION DIVISION.
           PROGRAM-ID. PTRDIFF.
    
    
           ENVIRONMENT DIVISION.
           INPUT-OUTPUT SECTION.
           FILE-CONTROL.
    
    
           DATA DIVISION.
           FILE SECTION.
    
    
           WORKING-STORAGE SECTION.
           01  TEST-STRING-1                    PIC X(160)
               VALUE "green eggs and ham".
           01  TEST-STRING-1-PTR                POINTER.
           01  TEST-STRING-2-PTR                POINTER.
           01  TEST-STRING-1-PTRR               REDEFINES TEST-STRING-1-PTR.
               05 FILLER                        PIC X(12).
               05 OFFSET1                       PIC 9(9) BINARY.
           01  TEST-STRING-2-PTRR               REDEFINES TEST-STRING-2-PTR.
               05 FILLER                        PIC X(12).
               05 OFFSET2                       PIC 9(9) BINARY.
           01  OFFSET                           PIC 9(9) BINARY.
    
    
           PROCEDURE DIVISION.
           MAIN.
    
    
               SET TEST-STRING-1-PTR TO ADDRESS OF TEST-STRING-1.
               SET TEST-STRING-2-PTR TO ADDRESS OF TEST-STRING-1.
               SET TEST-STRING-2-PTR UP BY 2.
               COMPUTE OFFSET = OFFSET2 - OFFSET1.
               DISPLAY OFFSET.
    
    
    
    
               STOP RUN
               .

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.251
    Mir dürfen doch auch schon mal Rechenfehler unterlaufen.
    Immerhin seid ihr ja auch gefordert.
    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

  9. #9
    Registriert seit
    Feb 2015
    Beiträge
    5
    Hi Rainer,

    ja genau RPG kann es, CL kann es aber COBOL :-( ... Schade.

    Danke auch für deinen Tipp.

Similar Threads

  1. Kennwortsync zwischen AS/400 und Windows 2000
    By Chrischmi in forum NEWSboard Windows
    Antworten: 1
    Letzter Beitrag: 02-11-05, 11:53
  2. DDMF zwischen V5R2 und V3R2 und V4R3
    By froehlich in forum IBM i Hauptforum
    Antworten: 26
    Letzter Beitrag: 16-07-04, 10:56
  3. Möchte Verindung zwischen 2 AS/400 im Ethernet
    By Schwarzbueb in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-04-03, 14:02
  4. Anfänger-- Verbindung zwischen AS/400 und PC
    By hakim in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 26-10-01, 10:30
  5. FTP zwischen AS/400 und PC
    By Vetter in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 14-03-01, 09:12

Tags for this Thread

Berechtigungen

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