[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    78

    Question Verarbeitung mit variabler Satzstruktur

    Hallo,
    ich arbeite an einem PGM das dafuer sorgen soll in Dateien Kommas und Querstriche in allen alphanumerischen Feldern mit Blanks zu ersetzen.
    Mein Ansatz war mit DSPFFD in eine Outfile die alphe felder sowie deren laenge und Position zu finden.
    Soweit so gut.
    Mein Problem ist jetzt wie bringe ich einen Satz in einen Char String um auf die jeweiligen zeichen zuzugreifen?
    In eine DS einlesen geht ja nicht da die Files bei jedem call eine andere struktur haben koennen.
    Der Feldname hilft mir im Prinzip auch nichts wenn ich den dann in einem Array habe....jemand einen Tip?

    Vielen dank im vorraus.
    Achja, Satzlaenge bis zu 9999 - also scheidet DTAARA auch aus.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.874
    Hallo,

    hast Du eigentlich schon mal daran gedacht mit (embedded) SQL zu arbeiten?

    Ich würde über die SQL-View SYSCOLUMS in der Bibliothek QSYS2 die alphanumerischen Felder in der gewünschten Bibliothek ermitteln.

    Anschließend über diese Informationen dynamische Update-Statements generieren, in denen mit Hilfe der skalaren Funktion Translate die Sonderzeichen durch Blanks ersetzt werden und diese Statements mit EXECUTE IMMEDIATE ausführen.

    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

  3. #3
    Registriert seit
    Jun 2004
    Beiträge
    78
    Hallo Birgitta,
    um ehrlich zu sein - daran habe ich nicht gedacht
    Aber wie immer, vielen Dank fuer Deine hilfreiche Anregung. Ich werde das wie von Dir vorgeschlagen versuchen.

    Gruss Ralf

  4. #4
    Registriert seit
    Jun 2004
    Beiträge
    78
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich würde über die SQL-View SYSCOLUMS in der Bibliothek QSYS2 die alphanumerischen Felder in der gewünschten Bibliothek ermitteln.
    OK, der Teil war einfach. Ich habe die Feldnamen in ein Array geschrieben.

    Zitat Zitat von B.Hauser Beitrag anzeigen
    Anschließend über diese Informationen dynamische Update-Statements generieren, in denen mit Hilfe der skalaren Funktion Translate die Sonderzeichen durch Blanks ersetzt werden und diese Statements mit EXECUTE IMMEDIATE ausführen.
    Und dazu bin ich zu bloed
    Ich Schreibe folgendes Statement in meine Variable:
    UPDATE @LIBRARY/@FILE SET @FIELD = Translate'(:@Field,' ', ',')
    Und versuche das dann so auszufuehren:
    C/EXEC SQL
    C+ execute immediate :sqlComma
    C/END-EXEC

    Als Fehler bekomme ich:
    SQL0312 30 Variable &1 not defined or not usable.

    Wie muss ich also das Statement aufbauen um mit Variabler Lib, Variabler File und Variablem Feld eben dieses Feld ggf zu aendern wenn ein Zeichen enthalten ist das ersetzt werden muss?
    Also @Library ist eine Variable.
    @File ist eine Variable.
    @Field enthaelt den aus dem Array uebertragenen Feldnamen.
    Hier denke ich liegt auch mein Fehler, einerseits sage ich ja mit @Field das ich in diesem Feld einen Wert aendern moechte und versuche andererseits diese Variable fuer den feldwert zu verwenden.....funzt wohl so nicht. Birgitta, wenns Dir nicht zu bloed ist, kannst Du mir das begreiflich machen?

    Vielen Dank, Gruss Ralf

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.874
    Hallo,

    der aufbereitete String muss ein ausführbares SQL-Statement sein. In Deinem String sind nicht aufgelöste Variablen enthalten:

    Beispiel:
    PHP-Code:
     /Free
       MySQLCmd 
    'Update ' + %Trim(MyLib) + '/' + %Trim(MyTable)  
                  + 
    ' Set ' + %Trim(MyFld) +  ' = Translate ... usw.;

     /End-Free
    C/EXEC SQL  Execute Immediate :MySQLCMD
    C/End-Exec 
    Achtung vor = Translate (wird ein Hochkomma nicht angezeigt!)

    Vergiß außerdem nicht, dass Hochkommata in einem String verdoppelt werden müssen.

    Um eine bessere Performance zu erhalten, würde ich nicht für jedes Feld und jedes Sonderzeichen ein Update ausführen, sondern pro Datei ein einziges SQL-Statement aufbereiten und ausführen.

    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

  6. #6
    Registriert seit
    Jun 2004
    Beiträge
    78
    Danke Birgitta, jetzt funzt es
    Was mich am meisten verbluefft ist das die Performance sehr gut ist.
    Habe Testweise eine Datei mit 1200 Saetzen und 15 Char Feldern verarbeitet - Interaktiv <1 sec

    Gruss Ralf

Similar Threads

  1. MQ-Series: Automatische Verarbeitung
    By RLurati in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-10-06, 09:09
  2. MQ-Series: Automatische Verarbeitung
    By RLurati in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 20-10-06, 08:31
  3. Bildschirmfeld variabler Länge
    By harkne in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-12-05, 17:46
  4. Zugriff auf Datei wo Keyfeld vom Typ variabler Länge
    By holly in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 07-12-04, 13:23
  5. Fehler bei Verarbeitung von QSZPAVL
    By Brownie in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-07-04, 10:56

Berechtigungen

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