-
API QCLSCAN
Hallo Forum,
wir sind dabei einen Suchstring in einem RPG Programm einzubauen und wir scheitern anscheinend an der Logik.
Wir wollen das APi QCLSCAN nutzen und haben den
Translate Parameter auf "1" gesetzt.
Die Anforderung sollte sein Gross- u. Kleinschreibung zu
ignorieren, aber gefunden werden nur Daten, wenn der
Suchstring in Grossbuchstaben eingegeben wird. Werden
Kleinbuchstaben eingegeben, dann wird nichts gefunden.
Hat jemand eine Idee, was wir falsch machen ?
-
Translate characters
INPUT;CHAR(1)
A variable that indicates to translate lowercase characters in the specified character string to uppercase characters. If this field contains a 1, the program translates lowercase characters of the string to uppercase before the scan using the coded character set identifier (CCSID) for the current job. If the translation cannot be done using the CCSID for the job, *CCSID37 is used. This does not change the user's data. Note that if 1 is specified and the pattern contains lowercase characters, a match never occurs. If 1 is specified, and the data to be searched contains noncharacter data (for example, packed or binary), unexpected results can occur.
Will heißen:
Die zu durchsuchende Zeichenkette wird in Großbuchstaben übersetzt und nicht die Suchfolge. Der Rest erklärt sich wohl von slbst.
-
QCLSCAN
Hallo Fuerchau,
danke für die Antwort. So selbsterklärend ist es doch nicht.
Anforderung: es wurde eine Datei erstellt mit Addressdaten
aus dem Internet.
So nun soll ein Abgleich auf vorhandensein der Addresse in
unserer Datenbank stattfinden.
Bei den Addressdaten vom Internet ist z.B.: der Dagobert Duck enthalten. In unserer Datenbank steht er aber mit DAGOBERT DUCK. Und so wird er nicht gefunden:
DCL VAR(&TRANSLATE) TYPE(*CHAR) LEN(1) VALUE('1')
/* ignore upper/lower case */
Was steckt jetzt wirklich dahinter, wir diskutieren bei uns sehr heftig über die Anschauungsweise dieses API's.
-
Das ist genau das Problem. QCLSCAN kann es nicht lösen, da der Schalter, wie gesagt, nicht die Suchzeichen sondern die zu durchsuchende Zeichenkette umwandelt (siehe Beschreibung).
Ist der Suchbegriff also in GrossKlein muss ich ihn vorher mit QDCXLATE in Grossbuchstaben wandeln.
Ansonsten wäre SQL besser:
where ... upper(mydbfield) like upper(trim(:myfield)) ...
-
Man könnte sich auch mit einer kleinen RPG-Prozedur mit embedded SQL behelfen:
Die folgende Prozedur bringt *Zeros zurück, wenn der übergebene String nicht gefunden wurde. Ansonsten wird die erste Position an der der Such-String steht zurückgegeben.
Groß- und Kleinschreibung wird dabei ignoriert, d.h. wenn nach 'Dagobert Duck' gesucht wird, wird sowohl 'DAGOBERT DUCK' als auch 'dAgObErT dUcK' gefunden:
PHP-Code:
P ScanLangIdShr B Export
D ScanLangIdShr PI 10I 0
D PPText 32740A varying Const
D PPSearch 32740A varying Const
D Position S 10I 0
*-------------------------------------------------------
C/EXEC SQL Set Option SrtSeq = *LangIdShr
C/End-EXEC
C/EXEC SQL Set :Position = PosStr(:PPText, :PPSearch)
C/End-EXEC
C Return Position
P ScanLangIdShr E
Birgitta
-
PosStr ist aber leider nicht so flexibel, da QCLSCAN auch Wildcards unterstützt. Like gibt da auch leider keine Position zurück, hat aber wiederum Wildcards.
-
Ob ich LIKE oder POSSTR verwende ist im Endeffekt egal!
Mit Like (inclusive Wildcards und unter Berücksichtigung der Sonderzeichen % und _) würde die Funktion wie folgt aussehen:
PHP-Code:
P Like B Export
D Like PI A
D PPText 32740A varying Const
D PPSearch 32740A varying Const
D PPEscape 1A Const Options(*NoPass)
D ParmEscape C const(3)
D Found S 1A
*----------------------------------------------------------
C/EXEC SQL Set Option SrtSeq = *LangIdShr
C/End-EXEC
C If %Parms >= ParmEscape
C/EXEC SQL
C+ Set :Found = Case when :PPText like :PPSearch escape :PPEscape
C+ then '1' else '0' End
C/END-EXEC
C else
C/EXEC SQL
C+ Set :Found = Case when :PPText like :PPSearch
C+ then '1' else '0' End
C/END-EXEC
C EndIf
C Return Found
P Like E
Birgitta
-
vielen Dank an Birgitta und Fuerchau
Hallo Birgitta und Fuerchau,
vielen Dank an Euch beide. Es funktioniert jetzt.
Similar Threads
-
By TMusolf in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 25-01-07, 12:42
-
By muadeep in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 03-01-07, 17:53
-
By jogisarge in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 22-11-06, 16:02
-
By ExAzubi in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 17-10-06, 16:48
-
By lyrics in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 29-08-06, 09:03
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks