Cobol Picture Clausola Binario Options


La ricerca e la ricerca verbo Abbiamo visto come codificare una nostra ricerca di tavolo, ora vedremo in alternativa, la ricerca verbo. Il RICERCA verbo automatizza il processo di ricerca ed è utile in una grande percentuale dei tempi in cui è necessario fare una ricerca. Prima abbiamo effettivamente discutere SEARCH verb, si dovrebbe rivedere e capire la logica di una ricerca. Ci sono due tipi di ricerche: la ricerca lineare e la ricerca binaria. Entrambi possono essere codificati dal programmatore utilizzando il codice tradizionale o codificati dal programmatore utilizzando la ricerca verbo. La ricerca che è codificato dal programmatore utilizzando codici tradizionale utilizza un occorre alla definire il ripetersi degli elementi nella tabella e il pedice per controllare scorrere la tabella di un elemento alla volta utilizzando il loop. Diamo un'occhiata più da vicino a un indice. Un indice è essenzialmente un puntatore che indica uno degli elementi nella tabella. L'indice è un tradizionale campo sotto il controllo del programmatore. L'indice di solito è inizializzato con una dichiarazione SPOSTA e incrementato con un'istruzione ADD (o una dichiarazione SOTTRAI se il pedice veniva ridotta). L'indice è definito dal programmatore. In contrasto con il pedice, SEARCH verbo usa un indice che è definita dal nome con il tavolo. L'impostazione attuale dell'indice avviene attraverso COBOL. L'indice è limitato in uso. Deve essere utilizzato con la tabella che ha definito e deve essere controllata utilizzando l'istruzione con la clausola modifica o il verbo SET PERFORM. Essenzialmente un programmatore ha molto più controllo sulla manipolazione di un indice di un indice. Poiché l'indice è utilizzato con la ricerca verbo, le restrizioni sono definite per massimizzare lo uso efficace in quel contesto. Lineare Ricerca: La ricerca che abbiamo preso in considerazione è una ricerca lineare. Una ricerca lineare controlla il campo abbiamo bisogno di corrispondere l'uno contro l'elemento della tabella per vedere se corrispondono. Tradizionalmente la ricerca inizia con il primo elemento nella tabella e termina quando viene trovata una corrispondenza o abbiamo controllato ogni record nella tabella. Va notato che se gli elementi della tabella sono in ordine, un'uscita precoce può essere codificato. Guardando l'esempio zuppa, i numeri sono in ordine. Se siamo alla ricerca di una corrispondenza di 18, noi non dobbiamo cercare l'intera tabella, siamo in grado di smettere di guardare quando l'elemento della tabella è maggiore che il numero che stiamo cercando, 18. In altre parole, quando la ricerca mette a confronto 18 al 24 nella tabella, possiamo dichiarare la ricerca su poiché abbiamo superato il punto in cui la partita sarebbe stata. Questo esempio di ricerca ha una rapida uscita che viene fatto semplicemente modificando il PERFORM FINO. Il cambiamento è stato evidenziato. Prendi un minuto per rivedere la tradizionale ricerca qui sotto e poi ci si sposterà al verbo di ricerca. Ora faremo la stessa ricerca utilizzando la ricerca verbo. In primo luogo, abbiamo bisogno di definire la tabella. La differenza è che nella definizione della tabella, abbiamo anche stabilire l'indice. Il RICERCA verbo lineare utilizza l'istruzione SET per stabilire l'indice prima della ricerca. Il RICERCA verbo è quello utilizzato per eseguire la ricerca lineare. Il formato della istruzione SET è: C'è anche un formato speciale per aggiungere o diminuire l'indice: il formato della ricerca verbo lineare è: utilizzando la ricerca verbo, la ricerca di una corrispondenza nella tabella zuppa, sarebbe: cose di prendere atto di: nome utilizzato dopo la ricerca di parole è stato definito con la verifica l'clausola FINE AT viene usato per dire che cosa trattamento dovrebbe essere fatto se la ricerca non ha avuto successo - questa clausola è opzionale, quindi, se non il trattamento speciale è di essere fatto se la ricerca non ha successo di questa clausola può essere eliminata la clausola WHEN confronta l'elemento nella tabella per l'elemento del programma sta cercando di corrispondere - allora il trattamento deve essere fatto se la partita viene trovata è codificato noti che nella ricerca si codificare da soli, e la ricerca verbo ci sono alcune somiglianze. Sia inizializzare l'indice o l'indice prima di iniziare la ricerca. Entrambi hanno una dichiarazione confronto a confronto un elemento nella tabella per l'elemento che sta cercando di abbinare Entrambi consentono la lavorazione se la partita è successo Entrambi consentono la lavorazione se la partita non è riuscita ricerca binaria: una ricerca binaria è una ricerca molto efficiente quando si tratta di un grande tavolo. Si noti che una ricerca binaria funziona solo se la tabella è in ordine dall'elemento che si sta cercando. Una ricerca binaria esamina la prima voce della tabella. Se viene trovata una corrispondenza, la ricerca è fatto. Se una partita non viene trovato, si controlla se la voce che si sta cercando di abbinare è più grande o più piccolo l'elemento centrale. Se è maggiore, di quanto sappiamo che abbiamo solo a guardare la metà del tavolo oltre la metà. Se è più piccolo, di quanto sappiamo che abbiamo solo a guardare la metà del tavolo prima della metà. Sulla base di questa decisione, abbiamo eliminare la metà del tavolo dalla ricerca. Abbiamo poi consideriamo l'elemento centrale nella metà che rimane e confrontarlo con l'elemento. Ciò sia trovare una corrispondenza o eliminare un altro quarto del tavolo. Si noti che in stabilire quale mezzo è se il numero di elementi è anche, il programmatore di una ricerca binaria può scegliere di arrotondare o troncare. Questo processo continua fino a quando viene trovata una corrispondenza sia o sia certo che l'elemento non è nella tabella. Guardando i numeri in nostro esempio la zuppa, la ricerca binaria procederà in questo modo per trovare una corrispondenza per il numero 27: USO clausola 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. La voce del gruppo si è ancora trattato come un data-item alfanumerici (vedi esempio sotto programma).Usage IS COMPUTAZIONALE o COMP o binari sono sinonimi di una USO another. The IS clausola indice viene utilizzato per fornire una tabella indice ottimizzato. Quando una tabella è il bersaglio di una dichiarazione RICERCA deve avere una voce indice associato (vedi la ricerca Tutorial). Qualsiasi elemento dichiarato con utilizzo è indice può apparire solo in: - una ricerca o istruzione SET - Una condizione di relazione - La frase UTILIZZO della divisione PROCEDURA - La frase UTILIZZO della dichiarazione CALL La stringa immagine di un COMP o un elemento PACKED-decimale contengono solo i simboli 9, S, V Andor P. The clausola di immagine utilizzati per gli elementi COMP o imballati-decimale deve essere numerico. 1QuadWord (8 byte) Pranzi decimale Data-articoli dichiarati come PACKED decimale sono tenuti in codice binario decimale modulo (BCD). Invece di rappresentare il valore come un unico numero binario, il valore binario di ciascuna cifra è tenuto in un nibble (mezzo byte). Il segno è tenuto in un nibble separata nella posizione meno significativo del prodotto (vedi schema). Utilizzo generale Note La clausola di utilizzo è uno dei settori in cui molti fornitori hanno introdotto estensioni allo standard COBOL. Non è raro vedere COMP-1. COMP-2. COMP-3. COMP-4. COMP-5 e di utilizzo POINTER articoli in programmi scritti con queste estensioni. Anche se COMP-1 e COMP-2 sono estensioni allo standard COBOL, fornitori sembrano utilizzare rappresentazioni identiche per questi usi. COMP-1 viene solitamente definita come una singola precisione, numero in virgola mobile, aderendo alla specifica IEEE per tali numeri (Real o Float in lingue digitati) e COMP-2 è di solito definita come una doppia precisione, numero in virgola mobile (LongReal o doppia nei linguaggi tipizzati). La clausola SINCRONIZZATO La clausola SINCRONIZZATO è talvolta usato con utilizzo è COMP o utilizzo è articoli INDEX. Viene utilizzato per ottimizzare la velocità di lavorazione, ma lo fa a scapito di requisiti di archiviazione. Molte memorie per computer sono organizzate in modo tale che ci sono limiti di indirizzamento naturali - come limiti di parola. Se non si interviene particolare alcuni elementi di dati in memoria possono cavalcare le tesi confini. Ciò potrebbe causare un sovraccarico di elaborazione, come la CPU può avere bisogno di due cicli operazione di recupero per recuperare i dati dalla memoria. La clausola SINCRONIZZATO viene utilizzato per allineare in modo esplicito gli elementi COMP e l'indice lungo i loro confini di parola naturali. Senza la clausola sincronizzato, data-oggetti sono allineati sui limiti di byte. La parola SYNC può essere usato al posto di sincronizzato. L'effetto della clausola sincronizzato è a carico di attuazione. Avrete bisogno di leggere il manuale del fornitore per vedere come funziona sul vostro computer (in alcuni casi può avere alcun effetto). Allo scopo di illustrare come funziona clausola SYNCHRONIZED Supponiamo che un programma COBOL è in esecuzione su un computer word-oriented dove la CPU preleva dati dalla memoria una parola alla volta. In questo programma si vuole eseguire un calcolo sul numero memorizzato nei TwoBytes variabili (come dichiarato nello schema seguente). A causa del modo in cui gli elementi di dati sono stati dichiarati, il numero memorizzato in TwoBytes a cavallo di un confine di parola. Per utilizzare il numero, la CPU deve eseguire due cicli operazione di recupero - uno per ottenere la prima parte del numero Parola2 e il secondo per ottenere la seconda parte del numero in word3. Questo doppio prendere rallenta calcoli. 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 Coughlan

Comments