File Section

Nel linguaggio Cobol la File Section è la sezione della Data Division dove dichiaro le caratteristiche dei files che il programma utilizza.

la file section in un programma Cobol

Se il programma non utilizza files, la sezione File Section può essere omessa.

Cos'è un file? Un file è un archivio, esterno al programma, dove sono registrati dei dati. I dati sono letti o scritti dal programma tramite le operazioni di input/output. Un file è composto da record. Tutti i record di un file sono organizzati con la stessa struttura.

    Il livello FD ( File Description )

    Ogni file usato dal programma deve essere descritto nella File Section tramite l'indicatore di livello FD ( File Description ).

    FD [nome file]

    L'indicatore FD va inserito a partire dall'ottava posizione (area A) del modulo di programmazione.

    Se la descrizione del file è già presente nella bibliotea del sistema, può essere richiamata tramite la clausola COPY

    FD [nome file] COPY [nome file di biblioteca]

    L'indicatore FD è composto da diverse clausole.

    • LABEL RECORD
      La clausola Label Record specfica se il file ha delle etichette ( labels ). Deve essere sempre indicata nella descrizione di un file.
      • STANDARD. Il file utilizza delle etichette standard.
      • OMITTED. Il file non è dotato di etichette. Ad esempio, i file di stampa da inviare alla stampante non hanno etichette. Lo stesso vale per i file assegnati ai vecchi dispositivi come il lettore/perforatore di schede.
      il formato della clausola LABEL RECORD nel linguaggio Cobol

      Nota. La clausola può essere scritta anche LABEL RECORDS ( al plurale ). Prima delle parole STANDARD/OMITTED possono esserci IS/ARE. Sono comunque facoltative. Il significato operativo è sempre lo stesso.

    • BLOCK CONTAINS
      Questa clausola specifica il numero dei record logici o dei caratteri contenuti in un record fisico ( BLOCK ) durante le operazioni di input/output di un file sequenziale.
      la sintassi della clausola Block Contains in Cobol

      Note. La parola CONTAINS può anche essere omessa. Se le dimensioni del blocco sono variabili devo aggiungere sulla stessa riga anche la parola TO seguita dal valore massimo. Se non specifico espressamente l'unità di misura del blocco ( caratteri o record ), il compilatore assume CHARACTERS di default. Quando si utilizzano i caratteri come unità di misura, sono compresi nel computo anche i caratteri speciali. Se la clausola BLOCK CONTAINS non è specificata, il compilatore Cobol assegna al blocco un'area di memoria (buffer) uguale alla lunghezza di un singolo record. Quindi sarebbe come scrivere BLOCK CONTAINS 1 RECORDS.

      Esempi pratici

      BLOCK CONTAINS 100 RECORDS.
      BLOCK CONTAINS 50 TO 100 CHARACTERS.
      BLOCK 1000.

      Cos'è un blocco? Un blocco è la quantità di record/caratteri letti o scritti in una sola operazione di I/O in un file sequenziale. Generalmente, le memorie di massa contengono più record logici in un blocco. In questo modo, leggendo più record alla volta, si riducono i tempi di riposizionamento dell'unità di lettura/scrittura (es. testina) dopo un singolo record.

    • RECORD CONTAINS
      Questa clausola definisce le dimensioni standard di un record.
      la sintassi della clausola RECORD CONTAINS
      Esempi

      RECORD CONTAINS 100 CHARACTERS
      RECORD 50 TO 100

      Nota. Se le dimensioni del record sono variabili, nella clausola devo indicare il valore minimo e massimo del record separati dalla parola TO. Le parole CONTAINS e CHARACTERS sono facoltative.

    • RECORDING MODE IS
      Questa clausola definisce la lunghezza del record. Le opzioni disponibili sono le seguenti:
      la clausola RECORDING MODE IS
      • F ( fissa )
        La lunghezza del record è fissa ed è calcolata automaticamente dal programma in base alla descrizione dei campi del record così come l'ha definita il programmatore nel codice sorgente.
      • V ( variabile )
        Il compilatore aggiunge automaticamente un campo in ogni record e blocco per indicare la lunghezza. Questo campo è letto dall'unità di input al momento della lettura. Non va dichiarato nel programma Cobol.
      • U ( indefinita )
        Il programmatore indica la lunghezza del record tra un minimo e un massimo di caratteri. La fine del record deve essere gestita nel programma con qualche criterio ( es. simbolo usato come fine record ). In questo caso, occorre omettere la clausola BLOCK perché non è possibile raggruppare più record in un solo blocco.
      • S ( spanned )
        Si tratta di un caso particolare in cui la lunghezza dei record, fissa o variabile, supera quella del blocco. Quindi, lo stesso record può risiedere su più blocchi e deve essere agganciato (spanned). In questo caso il bloccaggio deve essere definito obbligatoriamente in caratteri ( CHARACTERS ) e non in records.

      Esempi


      RECORDING MODE IS V
      RECORDING MODE IS U

      Nota. Se non la dichiaro la clausola RECORDING MODE IS, il compilatore assume di default la lunghezza fissa (F).

    • LA STRUTTURA DEL RECORD
      Nella struttura del record devo specificare l'ordine gerarchico dei campi, indicando per ciascuno la lunghezza e la tipologia del dato che contiene.

      Cos'è un campo? Un campo è un raggruppamento logico di caratteri all'interno di un record. Un record può essere composto da un solo campo, uguale al record stesso, o da diversi campi più piccoli. Ogni campo veicola un'informazione specifica. Ad esempio, il file studenti ha un record composto da 100 caratteri. Nel record sono registrate le informazioni sul nome dello studente, la data, l'esame e il voto.
      la differenza tra file, record e campi


      La struttura del record è composta da:
      • Il numero di livello
        A ogni campo è assegnato un numero di livello gerarchico composto da da un numero di due cifre, tra 01 e 49. Il livello 01 è assegnato al record. Ai campi è assegnato un livello contiguo da 02 a 49 in base al livello. E' consigliabile assegnare livelli con un passo di 5, in questo modo è sempre possibile aggiungere dei sottocampi ai campi già definiti. Il numero di livello 01 parte dalla colonna 8 (area A). Quelli successivi per indentazione dalla colonna 12 (Area B) o più interne.
      • Nome del campo
        E' il nome mnemonico che voglio assegnare a quel particolare campo. Posso scegliere qualsiasi nome, purché non sia già stato usato e non sia una parola riservata del linguaggio Cobol.
      • PIC
        La parola PIC è l'abbreviazione di picture e indica il tipo di dato e la lunghezza del campo. Il tipo di campo è indicato con un carattere: numerico (9), alfabetici (A), alfanumerici (X). Tra parentesi è, infine, indicata la lunghezza del campo in caratteri.

      Esempio
      un esempio pratico di FILE SECTION in Cobol
        Alcune osservazioni pratiche:
      • In presenza di sottocampi definiti, non è necessario indicare la dimensione del campo di livello superiore, perché il compilatore la ottiene sommando quella dei sottocampi. Ad esempio, nel campo dataesame non ho indicato né la lunghezza, né la tipologia del dato. In questo caso, il campo è considerato di default alfanumerico (X).
      • La lunghezza N dei caratteri del campo può essere scritta tra parentesi oppure ripetendo il carattere per N volte. Ad esempio, si può scrivere 9(3) oppure 999. E' lo stesso.
      • Il campo FILLER è una parola riservata del Cobol, si utilizza come riempitore per definire l'eventuale parte residua del record non assegnata a nessun campo. Può capitare di lavorare a un record più lungo del necessario, perché si prevede in futuro di aggiungere altri campi. In questo modo, grazie al campo FILLER, il compilatore verifica l'uguaglianza tra la lunghezza del record e la somma della lunghezza dei campi.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Il linguaggio Cobol