File Definition Language

Z Wikipedie, otevřené encyklopedie

File Definition Language (FDL) je jazyk popisující organizaci souboru a formát záznamů v operačním systému OpenVMS. Na rozdíl od OS Unix a většiny novějších operačních systémů včetně MS-DOSu a MS Windows je součástí OpenVMS vrstva Record Management Services, která umožňuje pracovat na úrovni operačního systému s různými formáty a organizacemi souborů. FDL je nástroj, který umožňuje zvolit organizaci nově vytvářeného souboru nebo vytvořit kopii existujícího souboru s jinou organizací.

Organizace souborů

RMS podporuje čtyři přístupové metody k záznamům:

  • Sekvenční přístup
  • Přístup podle relativního čísla záznamu
  • Record File Address přístup
  • Indexovaný přístup

RMS podporuje čtyři formáty záznamů:

  • záznamy s pevnou délkou
  • záznamy s proměnnou délkou
  • záznamy s proměnnou délkou a s pevnou délkou řídicích bloků
  • proudy soubory (záznamy oddělené ukončovacími znaky)
    • STREAM: záznamy zakončené znaky CRLF
    • STREAM_CR: záznamy zakončené znakem CR
    • STREAM_LF: záznamy zakončené znakem LF

Formáty textového souboru

Obyčejný textový soubor (členěný na řádky) může být na disku uložen různými způsoby:

  • soubor je proud bytů každý řádek je zakončen k tomu určeným znakem nebo posloupností znaků:
    • MS-Windows a MS-DOS používají dvojici znaků CR a LF
    • Unixové systémy používají znak LF
    • Počítače Apple Macintosh používají znak CR
  • řádky jsou proměnné délky, na začátku každého řádku je informace o jeho délce – toto je standardní formát textových souborů v OpenVMS
  • všechny řádky jsou doplněny mezerami nebo jinými znaky na pevnou délku, informace o délce řádků je uložena v metadatech souboru – tento formát byl obvyklý v době používání děrných štítků

OpenVMS umožňuje přímo prostředky operačního systému konvertovat soubory mezi uvedenými formáty.

Použití

Systém pro každý soubor udržuje informace o jeho organizaci a formátu záznamu. Tyto atributy se při kopírování souboru zachovávají. Problém může nastat:

  • pokud se soubor zkopíruje z počítače, který používá jiný operační systém
  • pokud jsou soubory sdíleny protokolem, který informace o atributech souboru nepodporuje (např. NFS)
  • pokud jsou soubory zabaleny do archivu, který tyto atributy nepodporuje (například ZIP bez použití parametru "-V")

OpenVMS umožňuje:

  • opravit atributy souboru, pokud se liší od skutečného formátu souboru (bez změny vlastních dat)
  • vytvořit soubor s určitými atributy
  • vytvořit kopii souboru, která bude mít stejný obsah, ale jiné atributy

Oprava atributů

Pokud organizace souboru na disku nesouhlasí s organizací uvedenou v metadatech souboru, je možné informace v metadatech upravit:

SET FILE /ATTRIB=(...)
popis ve .FDL souboru Význam SET FILE /ATTRIB=(…)
FORMAT stream řádky zakončené CR+LF RFM:STM
FORMAT stream_cr řádky zakončené CR RFM:STMCR
FORMAT stream_lf řádky zakončené LF RFM:STMLF
FORMAT fixed záznamy pevné délky RFM:FIX
FORMAT undefined nedefinovaný formát RFM:UDF
FORMAT variable záznamy proměnné délky RFM:VAR
FORMAT vfc RFM:VFC
CARRIAGE_CONTROL none RAT:NONE
SIZE délka záznamu LRL:32256

Například pro nastavení správného formátu záznamů u .BCK souboru lze použít:

SET FILE /ATTRIB=(RFM:FIX,RAT:NONE,LRL:32256) soubor.BCK

Vytvoření souboru

Vytvořit soubor s určitými atributy:

CREATE /FDL=popis.FDL soubor

Zkonvertování souboru

Pro zkonvertování textového souboru s organizovaného jako soubor s proměnnou délkou záznamů na textový soubor v unixovém formátu (konce řádku jsou LF) lze použít následující FDL soubor STREAM_LF.FDL:

RECORD
 FORMAT stream_lf

Vlastní konverze se provede příkazem:

CONVERT /FDL=STREAM_LF.FDL vstup.TXT vystup.TXT

Pro vytvoření textového souboru ve formátu MS-DOS nebo MS-Windows (konce řádku jsou CR+LF) by FDL soubor vypadal takto:

RECORD
 FORMAT stream

Zkonvertování souboru mimo OpenVMS

Pokud byl textový soubor s proměnnou délkou záznamů přenesen bez konverze z OpenVMS na jiný systém je možné k jeho konverzi použít následující skript vms2unix v jazyce Perl:

#!/usr/bin/perl

$filename=$ARGV[0];
open(FILE, $filename) || die "Error opening file $filename: $!\n";
do {
  $read=read(FILE, $buf, 2);
  ($len)=unpack("v", $buf);
  $read=read(FILE, $buf, $len);
  $read=read(FILE, $skip, 1) if $len % 2;
  $buf=~s/\x01\x8D//;
  print $buf, "\n";
} while (!eof(FILE));
close(FILE);

Konverze se provede příkazem

vms2unix vstup.txt > vystup.txt

Historický příklad – konverze na soubor se pevnou délkou záznamu

Pro zkonvertování textového souboru záznamy s pevnou délkou 80 znaků (formát děrných štítků) lze použít soubor FIXED80.FDL obsahující:

RECORD
 FORMAT fixed
 SIZE 80

Vlastní konverze se provede příkazem:

CONVERT /FDL=FIXED80.FDL /FIXED_CONTROL /PAD=" " vstup.TXT vystup.TXT

Vytvoření FDL souboru

Soubor s popisem atributů lze získat několika způsoby:

  • z existujícího souboru příkazem ANALYZE/RMS_FILE/FDL/OUTPUT=popis.FDL soubor
  • příkazem EDIT /FDL popis.FDL
  • vytvořit textový soubor popis.FDL

Organizaci souboru lze popsat *.FDL souborem. *.FDL pro existují soubor se vyrobí příkazem

ANALYZE/RMS_FILE/FDL/OUTPUT=organizace.FDL soubor

Pro výpis popisu organizace souboru na obrazovku lze použít /OUTPUT=SYS$OUTPUT

Kompletní popis textového souboru používajícího záznamy proměnné délky ve FDL:

IDENT   FDL_VERSION 02 " 3-APR-2014 08:54:40   OpenVMS ANALYZE/RMS_FILE Utility"

SYSTEM
        SOURCE                  OpenVMS

FILE
        ALLOCATION              64
        BEST_TRY_CONTIGUOUS     no
        CLUSTER_SIZE            64
        CONTIGUOUS              no
        EXTENSION               0
        FILE_MONITORING         no
        NAME                    "USER_DISK:[USER.KOLARP]VYPIS.TXT;1"
        ORGANIZATION            sequential
        OWNER                   [KOLARP]
        PROTECTION              (system:RWED, owner:RWED, group:RE, world:)
        GLOBAL_BUFFER_COUNT     0
        GLBUFF_CNT_V83          0
        GLBUFF_FLAGS_V83        none

RECORD
        BLOCK_SPAN              yes
        CARRIAGE_CONTROL        carriage_return
        FORMAT                  variable
        SIZE                    0

Úvodní obrazovka příkazu EDIT /FDL soubor.FDL:

                          OpenVMS FDL Editor

         Add     to insert one line into the FDL definition
         Delete  to remove one line from the FDL definition
         Exit    to leave the FDL Editor after creating the FDL file
         Help    to obtain information about the FDL Editor
         Invoke  to initiate a script of related questions
         Modify  to change an existing line in the FDL definition
         Quit    to abort the FDL Editor with no FDL file creation
         Set     to specify FDL Editor characteristics
         View    to display the current FDL Definition

         Main Editor Function            (Keyword)[Help] :

Reference

OpenVMS Record Management Utilities Reference Manual