PDA

View Full Version : Zeichenkette in Datei suchen RPG/400



speedy
11-02-03, 10:00
Hallo Leute,

habe ein Problem zwar möchte ich eine Suchfunktion in meine Anwendung einbauen.

Der Anwender muß einen Artikel nach Name suchen.
Er soll die Möglichkeit haben anstatt den ganzen Artikelnamen einzutippen den Anfangsbuchstaben oder die ersten 2 Buchstaben zu geben und nach Artikelnamen suchen.
Habe hierfür ein Suchfeld mit 6 Stellen.

Ich danke euch im voraus.

Speedy

B.Hauser
11-02-03, 10:20
Hallo,

Ich gehe davon aus, dass du eine logische Datei, die nach Artikel-Name sortiert ist, hast.

In diesem Fall setzt Du mit dem eingegebenen Feld auf und liest alle folgenden Sätze.

C Feld6 SetLL FileFmt
C DoU %EOF(FileName)
C Read FileFmt
C if %EOF
C leave
C endif
C Verarbeitung
C Enddo

Solltest Du noch mit RPGIII (RPG/400) arbeiten funktioniert das Ganze genau so.

Alternativ könnte man das Problem mit Embedded SQL lösen.

Birgitta

Jens Birkefeld
11-02-03, 10:37
Hallo,
zusätzlich würde ich empfehlen, bei der logischen Datei dafür zu sorgen, dass Groß- und Kleinschreibung gleichwertig behandelt wird, sonst funktioniert es nur bei genau gleicher Eingabe in Groß- und Kleinschrift in der Suchmaske. Das geht über die Zuordnung einer Umsetztabelle mittel Schlüsselwort TRNTBL und Angabe der Tabelle. Für meine Zwecke habe ich das mit der Tabelle Q273 gelöst. Das Feld muss dabei als reines Eingabefeld definiert sein, wie im nachfolgenden Beispiel:

A TKSCHL I TRNTBL(QUSRSYS/Q273)

Gruß Jens

speedy
11-02-03, 11:01
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von B.Hauser:
Hallo,

Ich gehe davon aus, dass du eine logische Datei, die nach Artikel-Name sortiert ist, hast.

In diesem Fall setzt Du mit dem eingegebenen Feld auf und liest alle folgenden Sätze.


Ich danke vielmals

Speedy
C Feld6 SetLL FileFmt
C DoU %EOF(FileName)
C Read FileFmt
C if %EOF
C leave
C endif
C Verarbeitung
C Enddo

Solltest Du noch mit RPGIII (RPG/400) arbeiten funktioniert das Ganze genau so.

Alternativ könnte man das Problem mit Embedded SQL lösen.

Birgitta[/quote]

speedy
11-02-03, 11:02
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von Jens Birkefeld:
Hallo,
zusätzlich würde ich empfehlen, bei der logischen Datei dafür zu sorgen, dass Groß- und Kleinschreibung gleichwertig behandelt wird, sonst funktioniert es nur bei genau gleicher Eingabe in Groß- und Kleinschrift in der Suchmaske. Das geht über die Zuordnung einer Umsetztabelle mittel Schlüsselwort TRNTBL und Angabe der Tabelle. Für meine Zwecke habe ich das mit der Tabelle Q273 gelöst. Das Feld muss dabei als reines Eingabefeld definiert sein, wie im nachfolgenden Beispiel:

A TKSCHL I TRNTBL(QUSRSYS/Q273)

Gruß Jens[/quote]

Vielen Dank Jens

JobstT
19-02-03, 14:28
hallo speedy,
ich hatte auch ein ähnliches problem.
allerdings wird bei uns die von dir be-
schriebene funktion bereits durch das
warenwirtschaftssystem abgedeckt.
bei uns kam die anforderung, gleitend
innerhalb der teilebezeichnung nach texten
variabler länge zu suchen.
ich habe dazu das API QCLSCAN verwendet.
funktioniert wunderbar und die anwender
sind zufrieden.

bei bedarf, schick mir eine mail an
toeberg@de.ninka.com - dann schick ich dir
auszüge aus dem quellcode.
(allerding noch in RPG III ;--)

Gruß Jobst

Fuerchau
19-02-03, 17:25
Warum in RPG mit QCLSCAN suchen ?
Die RPG-Anweisung SCAN bzw. %SCAN() löst das auch.

Steven
24-09-03, 09:52
Ich habe gerade ein Problem mit dem SCAN Befehl.

Ich will eine Suche mit 2 Eingaben ermöglichen (Artikelname/-nummer). Wenn ich jetzt bspw. "A" eingebe werden alle Artikel mit einem "A" im Namen gesucht. Das funktioniert. Nur wenn ich zusätzlich nach der Artikelnummer suche hauts nicht hin. Ich hab da zwar genau die gleiche Syntax wie beim Artikelnamen, aber da wird nix gefunden.

Beispiel:

Faktor 1 = '0 '
Faktor 2 = '"00 '

Wenn ich da nen Scan mach bleibt das Ergebnissfeld leer -> er findet nix.

Gibts da irgendwelche besonderheiten wenn ich 2 Scans auf eine Datei hintereinander mache?

Fuerchau
24-09-03, 11:38
Schau dir noch mal die Syntax des SCAN an:

Comp:Len SCAN Base:Start Pos

ggf. wird eine Zeichenkette gesucht die zu lang ist. Die Länge des Suchstrings kannst du mittels CHEKR vorher ermitteln.

ILE:

eval pos = %scan(%trim(Argument):Source:Start)

Steven
24-09-03, 12:55
EDIT:

Mein Fehler. Jetzt hauts hin. thx