Question

La documentation http: //h71000.www7.hp .com / doc / 731final / documentation / pdf / ovms_731_file_app.pdf (section 5-1) indique le nom du fichier devrait ressembler à ceci:

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

La plupart d'entre eux sont en option (comme noeud, dispositif, version) - pas sûr ceux et comment écrire correctement ce dans une expression rationnelle, (y compris le nom du répertoire):

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

DISK1:[MYDIR]FILE.DAT

[MYDIR]FILE.DAT

FILE.DAT;10

NODE::DISK5:[REMOTE.ACCESS]FILE.DAT
Était-ce utile?

La solution

Consultez la documentation et source pour le VMS :: Filespec Perl module.

Autres conseils

De wikipedia, la forme complète est en fait un peu plus que cela:

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

Celui-ci a pris un certain temps, mais voici une expression qui devrait accepter toutes les variations valides, et placer les composants en groupes de capture.

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

En outre, d'après ce que je peux dire, votre exemple de

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

est pas un nom valide. Je crois qu'une seule paire de supports sont autorisés. J'espère que cela aide!

Vous pourriez probablement venir avec un seul regex compliqué pour cela, mais il sera beaucoup plus facile à lire votre code si vous travaillez votre chemin de gauche à droite de décapage de chaque section si elle est là. Ce qui suit est un code Python qui fait exactement cela:

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))

et la sortie est

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top