Anmelden

View Full Version : Gross-/Kleinschreibung bei Dateien im IFS



Daechsle
07-11-13, 15:22
Hallo Welt

In einem Feld in einem Displayfile wird Pfad + Name einer Datei im IFS eingegeben. Die Gross-/Kleinschreibung spielt dabei keine Rolle, denn das Dateisystem findet die Datei immer case-insensitiv.

Jetzt soll dieser Dateiname in einem physischen File gespeichert werden, aber nicht so wie er eingegeben worden ist, sondern so wie er tatsächlich im IFS steht, wenn man ihn z.B. mit WRKLNK anschaut.

Beispiel:
Eingabe: /temp/xyz.jpg
Name im IFS: /Temp/XYZ.JPG
Gespeichert werden soll /Temp/XYZ.JPG.

Gibt es irgendein API oder sonst etwas, das den "richtigen" Namen anhand der Eingabe zurückliefern kann? Wir haben bis jetzt leider keine Möglichkeit gefunden.

Schöne Grüsse aus der Schweiz
Dächsle

Robi
07-11-13, 15:42
Du kannst die Datei mit ls oder find in eine Datei umleiten und daraus den Namen lesen.

Wir nehmen den Namen, bauen Ihn in Groß Klein um und machen ein rn (rename).
Dadurch sind 'unsere' Regeln eingehalten und ich weis auch gleich ob es das OBJ wirklich gibt.
Der Pfad sollte natürlich schon so existieren (als /Temp statt als /temp) sonst ist der aufwand etwas größer.
Robi

Fuerchau
07-11-13, 15:51
Hierzu musst du wohl die IFS-API's verwenden.

malzusrex
07-11-13, 15:59
Versuche mal folgendes



h dftactgrp(*no) bnddir('QC2LE') Option( *NoDebugIO )
h datfmt(*dmy.) timfmt(*hms:) datedit(*dmy.) decedit('0,') debug(*yes)

fxxwork if F 255 Disk UsrOpn

* Prozedurn-Def. extern für C-Api "system"
d System pr 10i 0 extproc('system')
d * value options(*string)
d
d Eingabe s 255
d File_Name s 255
d Befehl s 255

ixxwork kf
i 1 255 Daten

/Free

System('crtpf mylib/xxwork rcdlen(255)' );
Eingabe = '/temp/xyz.jpg';
Befehl = 'qsh cmd(''ls ' + %Trim( Eingabe ) + ' >/qsys.lib/' +
'mylib.lib/xxwork.file/xxwork.mbr 2>/dev/null'')' ;

SysTem( Befehl );

Open xxwork;
Read xxwork;
File_Name = Daten;

*InLr = *on;
/end-free


MyLib darf nicht die QTEMP !!! Sein

Gruß
Ronald

nicht schön, sollte aber funktioniren!

Fuerchau
07-11-13, 16:03
Das Problem bei der QSH ist, dass der Name der Datei und/oder des Pfades genau so wiedergegeben wird wie ich ihn eingebe.
Mache ich ein "ls FileName" ist die Ausgabe eben "FileName". Mache ich ein "ls filename" ist die Ausgabe "filename". Das selbe gilt auch für den "find".

malzusrex
07-11-13, 16:06
hhm,

Baldur hat leider recht!

Dann siehe das als Fingerübung ;-)

Fuerchau
07-11-13, 16:41
Da helfen dann leider wirklich nur die C-API's, hier die Directory-Funktionen.
Allerdings gilt ja hier das selbe wie für die QSH.
Also musst du den Namen erst mal in die einzelnen Teile, getrennt durch "/" zerlegen.
Dann jeden Pfadteil mittels der OpenDir()/ReadDir()/CloseDir()-Funktion durchlesen bis du den richtigen Teil gefunden hast.
Der Vergleich muss natürlich dabei caseinsensitive erfolgen wobei hier die korrekte CCSID für die Konvertierung (upper->Lower o.ä.) wegen der Sonderzeichen berücksichtigt werden muss.