Anmelden

View Full Version : IFS Filenamen aus PATH_NAME extrahieren



Seiten : 1 [2] 3

itec01
13-03-23, 17:12
Genau, die Tiefe der Subdirectories spielt hier keine Rolle, es wird der gesamte Pfad damit ausgeschlossen, sodass immer nur der Filename hier greift.

Dankeschön, dann werden wir das installieren.

Fuerchau
13-03-23, 17:12
Zu Regex siehe hier:
https://www.itjungle.com/2015/05/19/fhg051915-story01/

"The new Regular Expression Functions Require licensed product #39 5770-SS1 International Components for Unicode to be installed on both IBM i 7.1 and 7.2. (This product is free with IBM i.)"

itec01
13-03-23, 17:15
Du kannst erst mal versuchen, ob du den Split hast.
https://www.ibm.com/support/pages/systoolssplit

left join <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/')) S on 1=1

Der '/' ist ggf. als '\' zu ersetzen.
Damit kannst du schon mal die Feldnamen von S.* ermitteln.
</code>
Da ich keine ibm i gerade zur Hand habe, kann ich das leider nicht selber testen.
Wenn das klappt, gehts an die OLAP-Funktion.
https://www.ibm.com/docs/en/i/7.3?topic=statement-using-olap-specifications

Dazu brauchst du eine Derived Table => Select * fom (select ....) a

left join (
select * from <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/'))
) S

Wenn das klappt, dann

left join (
select last_value(Spaltenname) over() from <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/'))
) S
</code>

Ansonsten musst du bis morgen warten, da habe ich wieder Zugang zu einer IBM i.
</code>

reicht dicke bis morgen, danke.

itec01
13-03-23, 17:43
Du kannst erst mal versuchen, ob du den Split hast.
https://www.ibm.com/support/pages/systoolssplit

left join <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/')) S on 1=1

Der '/' ist ggf. als '\' zu ersetzen.
Damit kannst du schon mal die Feldnamen von S.* ermitteln.
</code>
Da ich keine ibm i gerade zur Hand habe, kann ich das leider nicht selber testen.
Wenn das klappt, gehts an die OLAP-Funktion.
https://www.ibm.com/docs/en/i/7.3?topic=statement-using-olap-specifications

Dazu brauchst du eine Derived Table => Select * fom (select ....) a

left join (
select * from <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/'))
) S

Wenn das klappt, dann

left join (
select last_value(Spaltenname) over() from <code class="hljs language-plaintext-ibm">TABLE(SYSTOOLS.SPLIT(PATH_NAME, '/'))
) S
</code>

Ansonsten musst du bis morgen warten, da habe ich wieder Zugang zu einer IBM i.
</code>

Irgendetwas mache ich noch falsch. Was muss ich bei Spaltennamen angeben. Der Split funktioniert.
SELECT S.*
FROM TABLE(QSYS2.IFS_OBJECT_STATISTICS('/temp/itec','YES'))
left join (select last_value(????) over() from TABLE(SYSTOOLS.SPLIT(PATH_NAME, '\')) S on 1=1
wHERE upper(PATH_NAME) LIKE '%/OLD%';

Fuerchau
13-03-23, 21:16
Mach doch erst mal einen

SELECT S.*
FROM TABLE(QSYS2.IFS_OBJECT_STATISTICS('/temp/itec','YES')) P
left join (select * from TABLE(SYSTOOLS.SPLIT(PATH_NAME, '\')) S on 1=1

damit du den Resultspaltennamen erfährst.

Ahoy
14-03-23, 05:28
Man kanns auch kompliziert machen...

SELECT
PATH_NAME,
SUBSTR(PATH_NAME, 1, LOCATE_IN_STRING(PATH_NAME, '/', -1)) AS PATH,
SUBSTR(PATH_NAME, LOCATE_IN_STRING(PATH_NAME, '/', -1) + 1) AS FILENAME
FROM TABLE(QSYS2.IFS_OBJECT_STATISTICS('/home/PGMRSTIX','YES'))

Andreas_Prouza
14-03-23, 06:10
... deshalb sollte Regex auf jedem System installiert sein. Ist auch von der Performance um einiges schneller.

itec01
14-03-23, 07:06
Man kanns auch kompliziert machen...

SELECT
PATH_NAME,
SUBSTR(PATH_NAME, 1, LOCATE_IN_STRING(PATH_NAME, '/', -1)) AS PATH,
SUBSTR(PATH_NAME, LOCATE_IN_STRING(PATH_NAME, '/', -1) + 1) AS FILENAME
FROM TABLE(QSYS2.IFS_OBJECT_STATISTICS('/home/PGMRSTIX','YES'))

Danke, das verstehe auch ich jetzt ;-). Ich hatte es auch schon mit dem locate versucht, aber die Erkenntnis mit dem -1 hat mir gefehlt.

itec01
14-03-23, 07:56
Zusammenfassend vielen Dank für die Hilfe und es gibt wie immer viele Wege, die nach Rom führen.
Der für mich verständlichste Weg war LOCATE_IN_STRING, regex ist schon sehr kryptisch, aber ich werde es installieren und testen.

Fuerchau
14-03-23, 08:32
Wieder was gelernt, LOCATE_IN_STRING kannte ich auch noch nicht.