Cobol Picture Clausola Binario Options


La lettura COBOL Layout Questo tutorial su come leggere un layout COBOL è stato scritto appositamente per i nostri clienti che hanno avuto una conversione eseguita a disco Interchange e hanno ricevuto un layout COBOL con i dati. Esso è destinato a dare informazioni sufficienti per leggere i layout più semplici. Non copre tutti gli argomenti o tutto ciò che ci si trova in un layout complesso, ed è destinato a spiegare i layout COBOL solo in modo da poter utilizzare i dati convertiti, non così è possibile scrivere programmi COBOL. Questo articolo inizia qui: lettura COBOL layout, dove troverete anche un indice degli argomenti. Parte 4: i campi numerici questa sezione descrive diversi tipi di dati numerici e la gestione dei segni e punti decimali. Indice di questa sezione: necessità di convertire i campi numerici Quello è il nostro COBOL azienda ha diversi tipi di campi numerici. Questi tipi di dati comprendono un campo di visualizzazione, che è composto di caratteri (i caratteri EBCDIC o ASCII per 0-9), campi binari, campi imballati, e campi in virgola mobile. Ci sono anche opzioni per un separato o - segno o un segno overpunch, e per decimali reale o implicita. Il tipo di dati è specificato dalla clausola di utilizzo è. L'utilizzo è Clausola Vi è in realtà più per l'affermazione dell'immagine rispetto weve descritto in precedenza. C'è una clausola di utilizzo è che specifica il tipo di archiviazione di un campo numerico - visualizzazione, binario, o di calcolo. La sintassi completa, tramite un esempio, è: che indica di memorizzare il campo nel formato computazionale-3. L'utilizzo è parte è facoltativo e generalmente lasciato, e computazionale può essere abbreviato COMP, quindi sarà più comunemente vedere questo scritto I tipi di campi numerici si comunemente vedere nei layout COBOL sono: Display (compresi i campi firma) Binary computazionale, o comp Comp-1 Comp-2 Comp-3 display, compresi i campi firmato o Sottoposto a zonizzazione, è il più comune, e comp-3 è il secondo tipo più comune di campo numerico. Alcuni compilatori possono anche avere tipi comp-4 e comp-5 di dati, di solito per emulare bozzetto su un altro compiler. Usage è formato Display è l'impostazione predefinita per i numeri in COBOL. Se si è specificato alcun utilizzo clausola, il valore predefinito è uso è del display, il che significa che il valore viene memorizzato come caratteri EBCDIC (cifre), al contrario di binario. Il valore può o non può avere un decimale - implicito o reale - e può essere firmato o hanno un o un segno distinto incorporato - che può essere sia iniziali o finali. L'impostazione predefinita firmato campo formato di visualizzazione contiene un segno finale incorporato, ed è comunemente chiamato firmati, o IBM firmati, o un campo suddivisa in zone. Questo tipo di dati è descritta di seguito. Firmato campi c'è un tipo di dati numerici comune usato in COBOL su mainframe IBM chiamati Firmato (chiamato anche IBM ha firmato, oppure a zone). COBOL rappresenta questo tipo di campo da parte di un S nella clausola immagine di un campo formato di visualizzazione, ad esempio, PIC S9 (6). Un campo Firmato è composta da normali caratteri numerici EBCDIC, uno per byte, per tutte le cifre tranne quello che tiene il segno, sia il più significativo (segno di primo piano) o il meno significativo (segno finale) cifre - di solito il digit meno significativo. La cifra che tiene il segno combina, o sopra colpisce il segno del numero su quel cifre. Ciò consente di risparmiare un byte che il segno sarebbe altrimenti occupare. Il valore di tale cifra è memorizzato come un valore binario, ed è ord con il codice di segno, che è D0 esadecimale per i numeri negativi, C0 esadecimale per valori positivi, e hex F0 per valori senza segno. A causa della overpunch, la cifra che tiene il segno non apparirà come un numero quando il campo viene visualizzato in modalità carattere EBCDIC. Se si dispone il campo e visualizzare un valore di 1,23 con un editor EBCDIC, si leggerà 0000012c. compilatori ASCII COBOL anche utilizzare un tipo di dati Firmato con un overpunch, ma i bit di segno sono diverse e non standardizzate tra i compilatori. Vedi la nostra breve Tech-Talk Firmato campi per ulteriori dettagli su entrambi EBCDIC e campi ASCII Signed. Segno è COBOL firmato campi separati incorporare il segno del valore di default (vedi campi contrassegnati di cui sopra). Ma vi è una disposizione in COBOL per un segno separata, e può essere sia iniziali o finali. L'affermazione di questo è Questo può essere combinato con la clausola iniziale o finale: Questa istruzione può essere applicata a un elemento elementare (campo) o per l'intero record. Computazionale e campi binari Poiché i computer eseguono i calcoli con i numeri binari, è più efficiente per memorizzare i valori nel file nella loro forma nativa binaria che a memorizzarli nella base di leggibile dieci. Se il numero è memorizzato nel suo formato binario nativo può essere l'input dal file e utilizzato direttamente. Se la sua memorizzata in un formato di dieci di base che deve essere convertito in binario prima di eseguire calcoli su di esso, poi riconvertito in base dieci per immagazzinaggio. COBOL definisce diversi tipi di dati binari. Vi elenco un breve riassunto qui, e è possibile trovare ulteriori dettagli in COBOL computazionale Campi e in COBOL Comp-3 campi pranzo. Prima di iniziare, c'è un punto importante da capire: Lo standard COBOL lascia l'effettiva attuazione dei tipi di dati più al venditore che ha scritto il compilatore COBOL. La ragione di questo è perché diversi computer - CPU - utilizzano diverse rappresentazioni binarie internamente e funzionano meglio con il proprio tipo di numeri binari. Questo approccio si traduce in compilatori migliori e più veloci, ma provoca anche la confusione, perché un tipo di dati bozzetto su una macchina non è necessariamente la stessa comp su un'altra macchina. Nella tabella seguente sono elencati gli usi comuni non tutti i compilatori seguiranno questi tipi. Per maggiori dettagli su ordine delle parole e dei segni vedi il link qui sopra. Quali dati tipo un campo utilizza per l'archiviazione è determinata dal utilizzo è clausola la definizione del campo, e nella maggior parte dei casi il numero di byte di memoria è determinato dal numero di cifre della PIC. numeri a virgola mobile seguono formati binari standard e come tale loro dimensioni non sono determinate da un PIC, e nessun PIC è utilizzata nella definizione di campo. Descrizione di decimale imballato come questo tipo di dati sono memorizzati è generalmente implementato come comp-3. Vedere comp-3. Durante la lettura di una specifica campo binario o comp, le dimensioni elencate nel PIC è il numero di cifre decimali dopo il numero viene convertito da binario a base dieci. Nel caso di un campo imballato, la sua la dimensione dopo l'estrazione. Veri programmatori decimale maggior parte dei PC tendono a pensare in termini di vera e propria decimale nei valori numerici. Su un PC, se si dispone di un campo di dollari e centesimi per, diciamo, totale della fattura, per un importo di 123.45, il file conterrà i sei byte 123.45 (e probabilmente un segno). In altre parole, vi è un vero punto decimale nel file. COBOL può fare anche questo, tramite il seguente: O: La presenza della. nel PIC provoca una vera decimale nel file. decimale implicita, tuttavia, è molto più comune in COBOL. Decimale implicita decimale implicita significa semplicemente c'è un punto decimale implicita in una posizione specificata in un campo, ma non effettivamente memorizzata nel file. La posizione del decimale implicita viene indicato da una V nel PIC. Utilizzando decimale implicita di risparmiare spazio nel file. decimale implicita può essere applicata a qualsiasi tipo di campo numerico, tra cui un sacco, o comp-3 campo. Ad esempio, è un campo decimale implicita. Ci sono 6 cifre, quindi un decimale implicita - il V - e altre 2 cifre, per un totale di 8 cifre. Il campo è di 8 byte di dimensioni non c'è. nel file - la posizione del punto decimale è implicato per essere tra il (6) 9 e il 99. Se il campo contiene 00.000.123 poi il saldo del conto è 1,23, perché c'è un decimale implicita tra i dollari e centesimi. Sincronizzazione e Allineamento questo argomento è un po 'coinvolta per questo tutorial, ma si dovrebbe essere a conoscenza di esso. Quando si utilizza lo stoccaggio binario (binary e comp) alcuni compilatori su alcune macchine possono richiedere che un campo numerico iniziare su alcuni di confine. Ad esempio, su una macchina a 32 bit, si può richiedere che un campo comp iniziare su un limite di 32 bit. Se si specifica un campo comp nel bel mezzo di un record, e non accade per iniziare su un limite di 32 bit (4 byte), il compilatore allinearlo a un limite di 32 bit per sincronizzarlo. Che cosa è in realtà memorizzati nel file non può essere lo stesso le foto sul layout indicano. Questo non è un problema molto comune, in parte perché i campi binari e comp non sono molto comuni nei file, ma si dovrebbe essere a conoscenza di esso. Informazioni aggiuntive Per ulteriori articoli sulla conversione dei dati, vedere la nostra TechTalk Index. Il nostro COBOL Servizi di conversione del disco Interchange Service Company in grado di convertire la maggior parte dei tipi di dati numerici, compresi tutti i tipi di dati EBCDIC IBM mainframe, e la maggior parte dei tipi di dati ASCII da sistemi UNIX e PC. La nostra biblioteca di routine di conversione ci permette di gestire quei lavori difficili che i compilatori COBOL standard di smussano Clausola convert. USAGE La clausola USO specifica il formato di un elemento di dati nella memoria del computer o in un record di file. In alcune circostanze, il file-record di un elementi di dati in formato può differire dal suo formato computer memoria, come specificato dalla clausola di utilizzo. Ciò può verificarsi quando i file system non-COBOL con diversi formati di memorizzazione dei dati sono accessibili attraverso un'interfaccia. Ad esempio, Acu4GL utilizza SQL per accedere ai file system non COBOL, e nel processo di traduzione avviene sui dati. Nota: Ci sono numerose opzioni del compilatore per influenzare il comportamento di memorizzazione dei dati. Vedere Opzioni di memorizzazione dati nella sezione ACUCOBOL-GT compatibilità. La colonna a sinistra mostra le abbreviazioni accettate per i termini a destra: Una clausola uso può essere utilizzato in qualsiasi descrizione dei dati di entrata ad eccezione di quelli con livello di numeri 66, 78, e 88. Una clausola di utilizzo non può essere utilizzato con un esterno elemento di dati a virgola mobile. Se una clausola di utilizzo è nella descrizione dei dati di ingresso per un elemento di gruppo, quindi eventuali clausole di utilizzo che appaiono per le voci subordinate devono essere dello stesso tipo. La stringa immagine di un COMP, COMP-1, COMP-2, COMP-3, COMP-4, COMP-5, COMP-6, punto binari o-decimale compresso può contenere solo i simboli 9, S, V, e P. COMP-6 articoli non possono utilizzare il simbolo S. La stringa immagine di un COMP-X o un elemento COMP-N può contenere solo tutti i 9 simboli o tutti i simboli X. La voce descrizione dei dati per un utilizzo è dato INDEX non può contenere uno dei seguenti clausole: vuoto quando ZERO, giustificato, immagine e valore. Livello 88 voci non possono essere specificati per un utilizzo è dato INDEX. La voce descrizione dei dati per un utilizzo è dato puntatore non può contenere uno dei seguenti clausole: vuoto quando ZERO, giustificato, o un'immagine. Un elemento di dati puntatore può avere una clausola valore specificato per questo, ma il valore deve essere la parola NULL. La voce descrizione dei dati per un utilizzo è FLOAT o un utilizzo è dato DOPPIA non può contenere una delle seguenti clausole: vuoto quando ZERO, giustificato, o un'immagine. FLOAT o gli elementi di dati Double possono avere una clausola di valore. Il valore può essere un virgola mobile, un letterale numerico, o la parola ZERO. Ecco un esempio di un elemento di dati sezione di lavoro-Storage: Il seguente sono chiamati collettivamente i tipi di dati in stile C: FIRMATO-INT, UNSIGNED-INT, FIRMATO-SHORT, UNSIGNED-SHORT, FIRMATO-LONG, UNSIGNED-LONG. Questi tipi di dati sono simili ai tipi di dati presenti nel linguaggio di programmazione C. La voce descrizione dei dati per un tipo di dati C-stile non può contenere i seguenti clausole: vuoto quando ZERO, giustificato, o un'immagine. Controllo-tipo è uno dei nomi tipo di controllo grafiche note al compilatore, come ad esempio etichette o ENTRY-FIELD, o il nome di un ActiveX, COM, o il controllo. La voce descrizione dei dati per gli elementi dei dati di utilizzo manico non può contenere i seguenti clausole: vuoto quando ZERO, giustificato, o un'immagine. Se contiene una clausola di valore, il valore specificato deve essere la parola NULL. Font-nome è uno dei seguenti identificatori: STANDARD-font, FISSO-font, TRADIZIONALE-font, SMALL-font, MEDIO-font, GRANDE-font. Va notato che l'opzione - DF o l'opzione - CV causerà il compilatore di trattare COMP-1 e COMP-2 come FLOAT e DOUBLE rispettivamente. Per ulteriori informazioni, vedere la sezione 5.4 in Transizione a ACUCOBOL-GT. Layout-name è il nome di uno dei sistemi di gestori di layout standard. Attualmente, questo non può che essere LM-RIDIMENSIONA. Una clausola USO scritto a livello di gruppo si applica ad ogni elemento subordinato elementare a tale elemento del gruppo. Se non viene specificato clausola di USO, quindi utilizzo è DISPLAY è implicito. Il formato interno di un utilizzo è oggetto DISPLAY è ASCII. Il formato di un elemento indice è 32 bit binario firmata. La sua dimensione è sempre quattro, ed è in possesso di un intervallo di valori da -2147483647 a 2147483647. Quando si utilizza uno switch di compilazione per la compatibilità con le versioni precedenti alla 6.0.0 (-Z52 per esempio) un elemento indice è a 16 bit binario senza segno, dimensione è sempre due, e tiene i valori da 0 a 65535. Il formato di un elemento di dati COMP-1 è 16 bit binario firmata. I valori di legge vanno da -32767 a 32767. Le dimensioni del dato è sempre due byte, e la metà di ordine alto dei dati vengono memorizzati nel byte più a sinistra. La stringa quadro che descrive l'articolo è irrilevante. A differenza di altri tipi di dati numerici, un errore di formato avverrà in un COMP-1, COMP-X, o elemento di dati COMP-N solo quando il valore supera la memorizzazione fisica dell'elemento (in altre parole, il numero di 9s negli articoli IMMAGINE viene ignorato quando è determinato errore di formato). Per COMP-2 (stoccaggio decimale), ogni cifra è memorizzato in un byte in formato decimale. Se il valore è firmato, quindi un byte finale aggiuntivo viene allocato per il segno. Lo stoccaggio di COMP-2 è identico con l'uso DISPLAY con l'alta ordine quattro bit spogliato da ogni byte. Per COMP-3 (stoccaggio imballato decimale), due cifre sono memorizzati in ciascun byte. Un mezzo byte aggiuntivo viene allocato per il segno, anche se il valore è senza segno. Il segno è posto nella posizione più a destra, e il suo valore è 0x0D per negativo tutti gli altri valori sono considerati positivi (ma vedi regola 18 sotto). Le dimensioni di un oggetto (di cui uno per il segno implicita) è diviso per due per arrivare alla sua dimensione effettiva (arrotondamento frazioni up). Il formato di un elemento COMP-4 è complemento a due binari (il valore senza il suo punto decimale). COMP-4 valori vengono memorizzati in un formato indipendente dalla macchina. Questo formato pone la parte di ordine più elevato del valore nella posizione più a sinistra e segue verso la parte bassa ordine nella posizione più a destra. Il numero di byte un dato occupa dipende dal numero di 9s nella sua IMMAGINE e sulla presenza di varie opzioni di compilazione. Ad esempio, è possibile includere più di diciotto 9s solo se il programma è stato compilato per il supporto 31 cifre. Questo è riassunto nella seguente tabella: Nota: Dove sono indicati due valori, il valore più piccolo si applica agli elementi di dati non firmati, e il valore maggiore si applica agli elementi di dati firmati. COMP-5 viene principalmente usato per comunicare con programmi esterni che prevedono nativo formato dati storage. The di un elemento di dati COMP-5 è identico a un elemento di dati COMP-4, tranne che i dati sono memorizzati in un formato dipendente dalla macchina. Si è memorizzato in un ordine che è naturale alla macchina host. Ad esempio, un PIC S9 (9) COMP-5 elemento di dati è equivalente a una parola binaria di 32 bit nel computer host, e un elemento PIC S9 (20) COMP-5 è equivalente ad una parola di 64 bit. Nota: I dati memorizzati in un campo COMP-5 potrebbero non essere trasportabile ad altre macchine, perché le macchine differenti hanno differenti byte-ordinamenti naturali. Su molte macchine (68000, più RISC), COMP-5 è identico a COMP-4. Su altri (80x86, VAX), è lo stesso con i byte in ordine inverso. Una clausola VALUE per un elemento di dati COMP-5 è memorizzato in un formato indipendente dalla macchina e viene regolata quando viene caricato nel dato. Questo assicura che il valore è lo stesso da macchina a macchina. Su aritmetica e esercizi non aritmetiche in Comp-5 elementi, se è richiesto il troncamento, per impostazione predefinita ACUCOBOL-GT tronca in decimale al numero di cifre indicate nella clausola IMMAGINE. È possibile utilizzare l'opzione del compilatore --TruncANSI per forzare troncamento in binario per la capacità di memorizzazione allocato di COMP-5 elementi. Il - DZ e --noTruncoptions effetti anche troncamento. Vedere Book 1, sezione 2.1.9, opzioni di archiviazione dati, per ulteriori informazioni. elementi di livello 01 e il livello 77 di dati che sono COMP-5 sono sincronizzati automaticamente ad un confine macchina adeguata, indipendentemente dalle impostazioni di compilazione. Questo permette di passare questi elementi in modo sicuro alla subroutine C senza dover preoccuparsi di allineamento. Se COMP-5 viene utilizzato con un (n) dato PIC X e assegnato un valore alfanumerico, i risultati sono indefiniti. Ad esempio, il seguente frammento di codice provoca NUM di avere un numero indefinito e il valore risultante per l'ultima linea saranno 100: Un elemento di dati PIC X (n) utilizzato con COMP-5 non può essere firmato. Il formato di un elemento COMP-6 è identico a un elemento COMP-3 eccetto che è senza segno e nessuno spazio viene allocato per il segno. Se il numero di cifre è dispari, viene aggiunto uno zero per l'estremità sinistra del numero prima viene compresso. Così ci sono due cifre decimali per byte, e la dimensione effettiva del prodotto è calcolato dividendo la sua dimensione dell'immagine per due e arrotondamenti. Un elemento di dati COMP-X deve essere descritta con una stringa quadro composto da soli 9 o solo simboli X. In entrambi i casi, l'elemento di dati è trattato come un intero binario senza segno, con una memoria interna simile a quella di un elemento di dati COMP-4. Se i simboli X sono utilizzati per descrivere la voce, quindi il numero di byte allocati per l'articolo è lo stesso del numero di simboli X nella stringa immagine. Se 9 simboli sono utilizzati al posto, allora il numero di byte allocato è il minor numero di byte necessari per contenere un numero di tale dimensione. Ad esempio, un elemento di dati PIC 99 sarà assegnato 1 byte un PIC 9 (9) dato va allocato 4 bytes. Regardless del numero di 9 simboli nelle voci picture stringa, il valore massimo che può essere memorizzato in un COMP articolo - X è determinata dal numero di byte allocati ad esso (ad un massimo di 18 cifre, o un massimo di 31 cifre se il supporto 31 cifre è attivo). Ad esempio, un elemento COMP-X costituito da 1 byte può contenere una serie di numeri da 0 a 255. Un COMP-X 2-byte può contenere da 0 a 65535. Una dimensione errore si verifica su un elemento COMP-X solo quando il valore è maggiore del dato può fisicamente contenere. Quando COMP-X viene utilizzato con un dato PIC (X), il massimo è PIC X (8). (Questo valore massimo viene aumentato a PIC X (16) quando il supporto 31 cifre è attiva.) Un elemento di dati COMP-N è identico a un elemento di dati COMP-X, tranne che i dati vengono memorizzati nel formato nativo macchine host, invece di formato indipendente dalla macchina. elementi di dati descritti come PACKED decimale sono identici a COMP-3. Si può causare non firmato imballato decimali da trattata come COMP-6 utilizzando una opzione di compilazione. Per impostazione predefinita, un elemento di dati binari è identico a un elemento di dati COMP-4. L'opzione di compilazione - D5 tratta elementi di dati binari come COMP-5 articoli al posto. In modalità di compatibilità VAXCOBOL, un elemento di dati COMP è la stessa COMP-4 e viene trattata come dati binari. In modalità di compatibilità RMCOBOL, COMP è la stessa COMP-2. È possibile utilizzare le opzioni di compilazione per modificare il comportamento predefinito. Un elemento di dati puntatore viene trattata come un elemento di dati numerici senza segno. Il formato interno diversa per ogni macchina. elementi di dati puntatore sono destinati a contenere gli indirizzi di altri elementi di dati (si veda l'istruzione SET.) Un elemento di dati puntatore può avere una clausola di valore specificato per questo, ma il valore specificato deve essere la parola NULL. Questo indica che il puntatore non fa puntare a qualsiasi elemento. Se un puntatore non viene dato esplicitamente un valore iniziale, allora il suo valore iniziale è elementi dati arbitrary. Pointer occupano 8 byte. Questo offre spazio sufficiente per contenere un indirizzo su una macchina a 64 bit. Se siete su una macchina più piccola, il runtime utilizza solo i primi 4 byte di elementi di dati puntatore (i finali 4 byte rimangono in memoria, sono solo lasciati inutilizzati). È possibile utilizzare l'opzione di compilazione DW per regolare lo spazio allocato per elementi di dati puntatore. È possibile farlo per conservare memoria, se sai che non sarà in esecuzione su un computer a 64 bit. I puntatori possono essere utilizzati nelle espressioni condizionali, dove possono essere comparati a vicenda o il valore NULL. Un confronto che coinvolge un puntatore deve essere o uguale o meno uguale (maggiore e minore di confronto non sono ammessi). Livello 01 e di dati di livello 77 elementi che sono gli elementi POINTER vengono sincronizzati automaticamente ad un confine macchina adeguata, indipendentemente dalle eventuali impostazioni di compilazione. Questo permette di passare questi elementi in modo sicuro alla subroutine C senza dover preoccuparsi di allineamento. Fatta eccezione per la sincronizzazione automatica, gli elementi dati di utilizzo POINTER sono trattati sotto ogni aspetto come USO elementi di dati UNSIGNED-Long. Questo gestisce correttamente tutte le macchine attuali. Questo comportamento può variare per soddisfare le esigenze di un futuro macchina. elementi di dati a virgola mobile vengono memorizzati in un formato dipendente dalla macchina. articoli FLOAT USO hanno 4 byte loro assegnati. USO articoli DOPPIA occupano 8 articoli bytes. Level 01 e il livello 77 di dati che sono USO Decimale o doppio vengono sincronizzati automaticamente ad opportuni limiti della macchina, indipendentemente da qualsiasi impostazione in fase di compilazione. Questo permette di passare questi elementi in modo sicuro alla subroutine C senza dover preoccuparsi di allineamento. La definizione ANSI del COBOL non precisa come segni devono essere conservati in campi numerici (salvo il caso di segno è separato). ACUCOBOL-GT consente di selezionare le convenzioni di accesso di stoccaggio alternativi utilizzando le opzioni di compilazione - Dca, - Dcb, - Dci, - Dcm, - Dcn, - Dcr, e - Dcv. Specifica di una convenzione di segno-storage a volte è utile quando si esportazione e l'importazione dei dati. Per ulteriori informazioni, consultare la Guida Utenti, sezione 2.2.10, Data Storage opzioni molto convenzione di archiviazione influisce sulla presentazione dei dati nell'uso DISPLAY, COMP-2, e tipi COMP-3 di dati. Nell'uso visualizzazione, memorizzazione standard ASCII, se il segno è integrato in una posizione di cifre, la cifra è codificato in base alla seguente tabella: voci di tabella contrassegnati con l'asterisco indicano gli elementi di dimensione fissa. Un elemento di dimensione fissa è la stessa dimensione, indipendentemente dalla macchina di destinazione. Le voci senza un asterisco sono variabili in termini di dimensioni. Questi elementi occupare lo spazio fino al numero di byte elencati nella tabella. Nota: I formati elencati nella tabella precedente copertura tutte le macchine attuali e futuri che corrono ACUCOBOL-GT. architetture future possono richiedere modifiche alla dimensione massima assegnata a questi elementi. In ambiente di esecuzione, questi elementi agiscono in tutti i modi, come elementi di dati di dimensione fissa se fossero di dimensioni adeguate. Ad esempio, il seguente frammento di codice: stamperà 4 quando viene eseguito su una macchina a 32-bit, ma stamperà 8 quando viene eseguito su un computer a 64 bit. Nei seguenti esempi, ogni byte è rappresentato da due cifre esadecimali o da un singolo carattere citato. Ogni valore è mostrato in vari formati. Viene anche mostrato USO DISPLAY utilizzando le varie opzioni SIGN. I seguenti esempi utilizzano le convenzioni di accesso di stoccaggio ACUCOBOL-GT di default. elementi di dati MANICO compongono la propria classe di dati e categoria in COBOL. Internamente sono memorizzati come valori interi, e si comportano come i numeri quando viene utilizzato. Un elemento di dati maniglia è normalmente utilizzato per contenere il manico di un oggetto creato in modo dinamico, come una finestra mobile o di un control. HANDLE grafica elementi di dati sono disponibili in due forme: digitato e generico. Si crea una maniglia generica quando si omette il DI frase. Si crea una maniglia digitato quando si include il DI frase. È possibile utilizzare elementi di dati gestire solo quando esplicitamente consentito, o come parte di un'istruzione MOVE un'istruzione CALL (come parametro), o in un espressione booleana. maniglie generici possono essere utilizzati in qualsiasi situazione in cui sono consentite maniglie. Quando si utilizza una maniglia generico come la fonte di una dichiarazione MODIFICA, non sarà in grado di utilizzare qualsiasi nome di proprietà o di stile specifico di controllo in questa affermazione. Questo perché la maniglia generico potrebbe essere associato a qualsiasi tipo di controllo. In questo caso, il compilatore non è in grado di determinare quale gruppo di nomi di stile e di proprietà è valida. maniglie tipizzati possono essere utilizzati nelle dichiarazioni in cui è consentita la presenza di maniglie o quando si fa riferimento a un oggetto di un tipo di corrispondenza. Ad esempio, un manico di finestra non può essere utilizzato come impugnatura in una nota DISPLAY ETICHETTA. Invece, è necessario utilizzare una maniglia generico o di un manico di ETICHETTA. maniglie tipizzati permettono al compilatore di riconoscere i nomi di stile e di proprietà associati al momento opportuno. maniglie tipizzati migliorano anche la leggibilità del programma, fornendo ulteriori informazioni sulla destinazione d'uso della maniglia, oltre a fornire in fase di compilazione per garantire che si sta utilizzando le maniglie in situazioni appropriate. Maniglie possono essere utilizzati in confronto. Ci sono solo due confronti significativi: il controllo per l'uguaglianza o la disuguaglianza a NULL, e il confronto ad un altro elemento di dati maniglia. Un valore di handle NULL indica sempre un handle non valido. Le maniglie sono memorizzati internamente come 4 byte interi binari. Questa informazione può essere utile quando si esegue il debug di un programma (è possibile esaminare i valori di maniglie in debugger). Si consiglia di non fare affidamento su questa definizione nel programma, però, perché è soggetto a modifiche in futuro. elementi di dati maniglia vengono sincronizzati automaticamente su un limite di 4 byte. Verificare ciò indipendentemente dall'impostazione dell'opzione compilazione tempo - DL (che limita la quantità di sincronizzazione). Il sistema di runtime richiede questo livello di allineamento per evitare di generare errori del bus su alcune macchine. Se viene specificato font-nome, quindi il dato descritto dalla clausola di utilizzo è inizializzato all'avvio del programma con il manico di carattere corrispondente. Questo agisce in modo identico a porre la dichiarazione: all'inizio del programma, in cui i dati-voce è la voce di dati descritto dalla clausola di utilizzo e font-nome è lo stesso di font-nome nella USO rappresentazione interna clause. The dei dati può essere una considerazione importante per l'efficienza del programma. Purtroppo la rappresentazione predefinito utilizzato da COBOL per elementi di dati numerici in grado di avere un impatto negativo la velocità di calcoli. Un formato più efficiente per i dati numerici può essere specificata utilizzando la clausola di utilizzo. Questa unità introduce il concetto di rappresentazioni dei dati interni, si discute la rappresentazione di default utilizzato in COBOL e delinea come quella rappresentazione, utilizzata per i dati numerici, potrebbe causare inefficienze. La sintassi della clausola utilizzo è dato e ha spiegato le varie opzioni. La clausola sincronizzato è introdotto e un esempio generalizzato dato. Obiettivi Entro la fine di questa unità si dovrebbe - sapere che il testo vengono memorizzati in un computer che utilizza una sequenza di codifica. Comprendere i problemi causati dalla memorizzazione di dati numerici come ASCII digits. Be in grado di utilizzare utilizzare la clausola di utilizzo per cambiare il modo in cui i dati numerici sono memorizzati nel computer. Know quando e come utilizzare la clausola SINCRONIZZATO. Prerequisiti Introduzione alla COBOL dichiarazione dei dati in COBOL Divisione Procedura base comandi di selezione in COBOL Iteration in COBOL Introduzione ai file trattamento sequenziale file sequenziali lettura sequenziale file modificati Immagini Computer memorizzare i loro dati sotto forma di cifre binarie. A parte i numeri cardinali (interi positivi) tutti gli altri dati memorizzati nella memoria del computer utilizza una sorta di convenzione formattazione. I dati di testo, per esempio, vengono memorizzati utilizzando una sequenza di codifica, come ASCII o EBCDIC. Un sistema di codifica è semplicemente una convenzione che prevede che un particolare insieme di bit deve essere usato per rappresentare un carattere particolare. Per esempio, la figura seguente mostra la configurazione di bit utilizzati per rappresentare un caso quotAquot superiore in ASCII e le sequenze di codifica EBCDIC. I dati numerici possono essere ritenuti come cifre di testo (caratteri ASCII) o numeri binari puri (nel caso di valori cardinali), o come complemento a due numeri binari (nel caso di interi), o come numeri decimali (utilizzando BCD), o come numeri reali (utilizzando un formato di numero reale, come la specifica IEEE per i numeri in virgola mobile). La clausola USO è utilizzato per specificare come un elemento di dati deve essere memorizzato nella memoria del computer. Ogni variabile dichiarata in un programma COBOL ha una clausola USO - anche se non è specificata alcuna clausola esplicita. Quando non vi è alcuna clausola esplicita USO, l'impostazione predefinita - utilizzo è DISPLAY - viene applicata. Problemi con utilizzo è visualizzare la velocità dei computer moderni significa che è difficilmente vale la pena di utilizzare la clausola USO a meno che l'elemento di dati sta per essere utilizzato in migliaia di calcoli. Per ragioni di portabilità della clausola USO dovrebbe mai essere usato nelle descrizioni record. Se il file viene letto su un diverso marca di computer non abbiamo alcuna garanzia che i dati saranno interpretati correttamente. Anche sulla stessa marca di computer, utilizzando la clausola USO nelle descrizioni dei record significa che i dati contenuti nel file probabilmente non sarà compreso da altri linguaggi di programmazione o da programmi di utilità o editor di testo. Per gli elementi di testo, o per gli elementi numerici che non stanno andando per essere utilizzato in un calcolo (numeri di conto, numeri di telefono, ecc), il default di utilizzo è DISPLAY non presenta problemi, ma per gli elementi numerici su cui qualche calcolo deve essere eseguito il utilizzo di default non è il modo più efficace per memorizzare i dati. Quando gli elementi numerici (PIC 9 articoli) hanno un utilizzo di DISPLAY. essi sono memorizzati come cifre ASCII (vedi le cifre ASCII 0-9 nella tabella ASCII di seguito). Si consideri il seguente frammento di programma. Che cosa accadrebbe se i calcoli sono stati fatti direttamente sui numeri memorizzati in questo formato Dal momento che nessuno degli elementi di dati hanno una clausola esplicita USO stabilizzano a - utilizzo è DISPLAY. Ciò significa che i valori nelle variabili Num1, NUM2 e num3 vengono memorizzati come cifre ASCII. Come funziona questo calcoli effetto se si esamina la tabella ASCII di seguito si vedrà che la cifra 4 (il valore in Num1) è codificato come 00.110.100 e la cifra 1 è codificato come 00.110.001. Quando questi questi numeri binari vengono sommati il ​​risultato è 01100101 che è il codice ASCII per il caso lettera quotequot inferiore. La somma 4 1 e non calcola. Quando i calcoli sono fatti con elementi di dati numerici il cui utilizzo è DISPLAY, il computer deve convertire i valori numerici per i loro equivalenti binari prima del calcolo può essere fatto. Quando il risultato è stato calcolato il computer deve riconvertire a cifre ASCII. La conversione da e per le cifre ASCII rallenta calcoli. Per questo motivo, i dati che è fortemente coinvolta nel calcolo viene spesso dichiarate utilizzando uno degli usi ottimizzati per il calcolo come utilizzo è computazionale. elementi del gruppo sono sempre trattati come alfanumerici e questo può causare problemi quando ci sono elementi COMP subordinati. Per esempio, supponiamo che abbiamo avuto una dichiarazione del genere - MOVE ZERI GROUP2. nel programma opposta. In superficie sembra come se questa affermazione si sta muovendo il valore numerico da 0 a NumItem1 e NumItem2 ma ciò che è in realtà mosso in questi elementi è il quot0quot cifre ASCII. Quando viene effettuato un tentativo di utilizzare NumItem1 o NumItem2 in un calcolo il programma andrà in crash perché questi data-articoli contengono dati non numerici. La clausola di uso può essere utilizzato con qualsiasi descrizione di inserimento dati ad eccezione di quelli con un numero di livello di 66 o 88. Quando la clausola di utilizzo è dichiarato per un elemento di gruppo, l'utilizzo specificato viene applicato ad ogni elemento del gruppo. The group item itself is still treated as an alphanumeric data-item (see example program below).USAGE IS COMPUTATIONAL or COMP or BINARY are synonyms of one another. The USAGE IS INDEX clause is used to provide an optimized table subscript. When a table is the target of a SEARCH statement it must have an associated index item (see the Search Tutorial). Any item declared with USAGE IS INDEX can only appear in: - A SEARCH or SET statement - A relation condition - The USING phrase of the PROCEDURE DIVISION - The USING phrase of the CALL statement The picture string of a COMP or PACKED-DECIMAL item can contain only the symbols 9, S, V andor P. The picture clause used for COMP or PACKED-DECIMAL items must be numeric. 1QuadWord (8 Bytes) PACKED-DECIMAL Data-items declared as PACKED-DECIMAL are held in binary-coded-decimal (BCD) form. Instead of representing the value as a single binary number, the binary value of each digit is held in a nibble (half a byte). The sign is held in a separate nibble in the least significant position of the item (see diagram below). General USAGE notes The USAGE clause is one of the areas where many vendors have introduced extensions to the COBOL standard. It is not uncommon to see COMP-1. COMP-2. COMP-3. COMP-4. COMP-5 and POINTER usage items in programs written using these extensions. Even though COMP-1 and COMP-2 are extensions to the COBOL standard, vendors seem to use identical representations for these usages. COMP-1 is usually defined as a single precision, floating point number, adhering to the IEEE specification for such numbers (Real or Float in typed languages) and COMP-2 is usually defined as a double precision, floating point number (LongReal or Double in typed languages). The SYNCHRONIZED clause The SYNCHRONIZED clause is sometimes used with USAGE IS COMP or USAGE IS INDEX items. It is used to optimize speed of processing but it does so at the expense of increased storage requirements. Many computer memories are organized in such a way that there are natural addressing boundaries - such as word boundaries. If no special action is taken some data items in memory may straddle theses boundaries. This may cause a processing overhead as the CPU may need two fetch cycles to retrieve the data from memory. The SYNCHRONIZED clause is used to explicitly align COMP and INDEX items along their natural word boundaries. Without the SYNCHRONIZED clause, data-items are aligned on byte boundaries. The word SYNC can be used instead of SYNCHRONIZED . The effect of the synchronized clause is implementation dependant. You will need to read your vendor manual to see how it works on your computer (in some cases it may have no effect). For the purpose of illustrating how the SYNCHRONIZED clause works let us assume that a COBOL program is running on a word-oriented computer where the CPU fetches data from memory a word at a time. In this program we want to perform a calculation on the number stored in the variable TwoBytes (as declared in the diagram below). Because of the way the data items have been declared, the number stored in TwoBytes straddles a word boundary. In order to use the number, the CPU has to execute two fetch cycles - one to get the first part of the number in Word2 and the second to get the second part of the number in Word3. This double fetch slows down calculations. Now consider the impact of using the SYNCHRONIZED clause. The number in TwoBytes is now aligned along the word boundary, so the CPU only has to do one fetch cycle to retrieve the number from memory. This speeds up processing but at the expense of wasting some storage (the second byte of Word2 is no longer used). Copyright Notice These COBOL course materials are the copyright property of Michael Coughlan. Tutti i diritti riservati. No part of these course materials may be reproduced in any form or by any means - graphic, electronic, mechanical, photocopying, printing, recording, taping or stored in an information storage and retrieval system - without the written permission of the author. (c) Michael CoughlanIBM VS Cobol II Compiler Options This section contains information on the IBM VS Cobol II compiler and library. It contains information on compiler options. For information on Compiler Directing Statements check this page out. Note: The defaults listed with the options below are the VS COBOL II defaults shipped with the product. They may have been changed by the installation. The minimum abreviation is the part that is capitialized. Note: The EXIT option cannot be specified in a PROCESS (CBL) statement. It can only be specified at invocation in the PARM field of JCL (under TSO, specify it in a command argument), or at installation time. INEXIT(str1,mod1) The compiler reads source code from a user-supplied load module (where mod1 is the module name), instead of SYSIN. LIBEXIT(str2,mod2) The compiler obtains copy code from a user-supplied load module (where mod2 is the module name), instead of library-name or SYSLIB. For use with either COPY or BASIS statements. PRTEXIT(str3,mod3) The compiler passes printer destined output to the user-supplied load module (where mod3 is the module name), instead of SYSPRINT. The module names mod1, mod2, mod3, can refer to the same module. The suboptions str1, str2, str3, are optional. They are character strings up to 64 characters in length and enclosed in apostrophes, that are passed to the exit module. Any character is allowed, but included apostrophes must be doubled, and lowercase characters are folded to uppercase. For more details on using EXIT to provide user-exits, see Using EXIT to Provide User-Exits in topic 5.2.2.9. Use NOFLAG to suppress error flagging. NOFLAG will not suppress error messages for compiler options. If you experience a problem with this page, please send a message to JTateJaTomes including a description of the problem.

Comments