Frage

Die Dokumentation unter http: //h71000.www7.hp .com / doc / 731final / Dokumentation / pdf / ovms_731_file_app.pdf (Abschnitt 5-1) sagt der Dateiname soll wie folgt aussehen:

node::device:[root.][directory-name]filename.type;version

Die meisten von ihnen sind optional (wie Knoten, Gerät, Version) - nicht sicher, welche und wie richtig diese in einem regulären Ausdruck schreiben, (einschließlich der Verzeichnisname):

DISK1:[MYROOT.][MYDIR]FILE.DAT

DISK1:[MYDIR]FILE.DAT

[MYDIR]FILE.DAT

FILE.DAT;10

NODE::DISK5:[REMOTE.ACCESS]FILE.DAT
War es hilfreich?

Lösung

Sehen Sie die Dokumentation und die Quelle für die VMS :: Filespec Perl-Modul.

Andere Tipps

Aus Wikipedia, die vollständigen Form ist eigentlich ein bisschen mehr als das:

NODE"accountname password"::device:[directory.subdirectory]filename.type;ver

nahm Dieser eine Weile, aber hier ist ein Ausdruck, der alle gültigen Varianten annehmen sollte, und legen Sie die Komponenten in Einfanggruppen.

(?:(?:(?:([^\s:\[\]]+)(?:"([^\s"]+) ([^\s"]+)")?::)?([^\s:\[\]]+):)?\[([^\s:\[\]]+)\])?([^\s:\[\]\.]+)(\.[^\s:\[\];]+)?(;\d+)?

Auch von dem, was kann ich sagen, Ihr Beispiel von

DISK1:[MYROOT.][MYDIR]FILE.DAT

ist kein gültiger Name. Ich glaube, nur ein Paar von Klammern erlaubt ist. Ich hoffe, das hilft!

Sie könnten wahrscheinlich mit einem einzigen komplizierten Regex für diese kommen, aber es wird viel einfacher sein, den Code zu lesen, wenn Sie Ihren Weg von links nach rechts Abstreifen jeden Abschnitt, wenn es da ist. Hier finden Sie einige Python-Code, der genau das tut:

lines = ["DISK1:[MYROOT.][MYDIR]FILE.DAT", "DISK1:[MYDIR]FILE.DAT", "[MYDIR]FILE.DAT", "FILE.DAT;10", "NODE::DISK5:[REMOTE.ACCESS]FILE.DAT"]
node_re = "(\w+)::"
device_re = "(\w+):"
root_re = "\[(\w+)\.]"
dir_re = "\[(\w+)]"
file_re = "(\w+)\."
type_re = "(\w+)"
version_re = ";(.*)"
re_dict = {"node": node_re, "device": device_re, "root": root_re, "directory": dir_re, "file": file_re, "type": type_re, "version": version_re}
order = ["node", "device", "root", "directory", "file", "type", "version"]
for line in lines:
    i = 0
    print line
    for item in order:
        m = re.search(re_dict[item], line[i:])
        if m is not None:
            print "  " + item + ": " + m.group(1)
            i += len(m.group(0))

und die Ausgabe ist

DISK1:[MYROOT.][MYDIR]FILE.DAT
  device: DISK1
  root: MYROOT
  directory: MYDIR
  file: FILE
  type: DAT
DISK1:[MYDIR]FILE.DAT
  device: DISK1
  directory: MYDIR
  file: FILE
  type: DAT
[MYDIR]FILE.DAT
  directory: MYDIR
  file: FILE
  type: DAT
FILE.DAT;10
  file: FILE
  type: DAT
  version: 10
NODE::DISK5:[REMOTE.ACCESS]FILE.DAT
  node: NODE
  device: DISK5
  directory: REMOTE.ACCESS
  file: FILE
  type: DAT
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top