Cobol picture clause binary options


Wyszukiwanie i czasownik wyszukiwania Widzieliśmy, jak skomentować własne wyszukiwanie tabel, teraz przyjrzymy się alternatywnym, czasownikowi SEARCH. Czasownik SEARCH automatyzuje proces wyszukiwania i jest użyteczny w znacznej części czasu, kiedy trzeba wykonać wyszukiwanie. Zanim omówimy czasownik SEARCH, warto przeanalizować i zrozumieć logikę wyszukiwania. Istnieją dwa rodzaje wyszukiwań: SZUKAJ LINII i SZUKAJ BINARYJSKICH. Obydwie mogą być kodowane przez programistę przy użyciu tradycyjnego kodu lub kodowane przez programatora za pomocą czasownika SEARCH. Wyszukiwanie, które jest kodowane przez programistę przy użyciu tradycyjnego kodu, wykorzystuje kod błędu OCCURS do określenia ponownego nawiązania elementów w tabeli i indeksie dolnym, aby kontrolować krok po kroku przez tabelę jeden element naraz, używając pętli. Przyjrzyj się bliżej indeksowi dolnemu. Indeks dolny jest zasadniczo wskaźnikiem wskazującym na jeden z elementów tabeli. Indeks dolny to tradycyjne pole pod kontrolą programisty. Indeks dolny jest zazwyczaj inicjowany przez instrukcję MOVE i zwiększa się wraz z instrukcją ADD (lub instrukcja SUBTRACT, jeśli zmniejszono indeks dolny). Indeks dolny jest definiowany przez programistę. W przeciwieństwie do indeksu dolnego, czasownik SEARCH używa indeksu, który jest definiowany przez nazwę w tabeli. Aktualna konfiguracja indeksu odbywa się za pomocą programu COBOL. Indeks jest ograniczony w użyciu. Musi być użyta z tabelą, która ją zdefiniowała i musi być kontrolowana przy użyciu instrukcji PERFORM z klauzulą ​​zmienną lub z czasownikiem SET. Zasadniczo programista ma o wiele większą kontrolę nad manipulowaniem indeksem niż indeksem. Ponieważ indeks jest używany z czasownikiem SEARCH, ograniczenia są definiowane w celu maksymalizacji skutecznego wykorzystania w tym kontekście. Wyszukiwanie liniowe: wyszukiwane przez nas wyszukiwania to liniowe wyszukiwanie. Wyszukiwanie liniowe sprawdza pole, które musimy dopasować do każdego elementu w tabeli, aby sprawdzić, czy są dopasowane. Tradycyjnie wyszukiwanie zaczyna się od pierwszego elementu w tabeli i kończy się, gdy znaleziono dopasowanie lub sprawdziliśmy każdy rekord w tabeli. Należy zauważyć, że jeśli elementy w tabeli są w porządku, wczesne wyjście może być kodowane. Patrząc na przykład zupy, numery elementów są w porządku. Jeśli szukamy dopasowania do 18, nie musimy szukać całego stołu, możemy przestać spoglądać, gdy pozycja w tabeli jest większa niż liczba, którą szukamy, 18. Innymi słowy, gdy wyszukiwanie porównuje 18 do 24 w tabeli, możemy zadeklarować przeszukiwanie, ponieważ minęliśmy punkt, w którym byłby mecz. Ten przykład wyszukiwania ma wczesne wyjście, które można wykonać po prostu modyfikując PERFORM UNTIL. Zmiana została podświetlona. Poświęć chwilę, aby przejrzeć tradycyjne wyszukiwanie poniżej, a następnie przejdziemy do wyszukiwarki. Teraz wykonamy to samo wyszukiwanie, korzystając z czasownika SEARCH. Najpierw musimy zdefiniować tabelę. Różnica polega na tym, że przy definiowaniu tabeli tworzymy również indeks. Liniowy czasownik SEARCH używa instrukcji SET, aby ustalić indeks przed wyszukiwaniem. Znacznik SEARCH nie jest używany do wykonywania wyszukiwania liniowego. Format instrukcji SET to: Jest również specjalny format dodawania lub zmniejszania indeksu: Format liniowego słownika SEARCH jest następujący: Używając słowa SEARCH, szukanie dopasowania w tabeli zupy to: Rzeczy do zapamiętania: nazwa używana po wyszukiwaniu słów została zdefiniowana za pomocą klauzuli ZAWARTOŚĆ KONIECZNEJ KONIECZNEJ, aby określić, jakie przetwarzanie należy wykonać, jeśli wyszukiwanie nie powiedzie się - ta klauzula jest opcjonalna, więc jeśli nie ma specjalnego przetwarzania jeśli wyszukiwanie nie powiedzie się, niż klauzula ta może zostać wyeliminowana, klauzula WHEN porównuje element w tabeli z elementem, który program próbuje dopasować - wtedy przetwarzanie, które ma być wykonane, jeśli znaleziono dopasowanie jest zakodowane Zauważ, że w wyszukiwaniu kod siebie i SEARCH czasownik jest kilka podobieństw. Przed rozpoczęciem wyszukiwania zainicjuj indeks dolny lub indeks. Obydwa mają porównanie porównujące element w tabeli z elementem, który próbuje być dopasowany Oba umożliwiają przetwarzanie, jeśli mecz się powiedzie Obie umożliwiają przetworzenie, jeśli dopasowanie nie powiedzie się Binarne wyszukiwanie: Wyszukiwanie binarne to bardzo wydajne wyszukiwanie, gdy masz do czynienia z dużym stołem. Należy pamiętać, że wyszukiwanie binarne będzie działać tylko wtedy, gdy tabela jest w porządku przez element, którego szukasz. Wyszukiwanie binarne spogląda na pierwszy element w tabeli. Jeśli zostanie znaleziony mecz, wyszukiwanie zostanie zakończone. Jeśli nie znaleziono dopasowania, sprawdza, czy element, który chcesz dopasować, jest większy lub mniejszy niż element środkowy. Jeśli jest większa, niż wiemy, że musimy tylko spojrzeć na pół stołu przez środek. Jeśli jest mniejsza, niż wiemy, że musimy tylko spojrzeć na pół stołu przed środkiem. Opierając się na tej decyzji wyeliminowaliśmy połowę tabeli z wyszukiwania. Następnie spójrzmy na środkowy element w połowie, który jest w lewo i porównaj go z elementem. To albo znajdzie mecz albo wyeliminuje kolejny kwartał stołu. Zauważ, że przy ustalaniu, co środkowe jest, jeśli liczba elementów jest równa, programista wyszukiwania binarnego może wybrać okrągły lub ścięty. Proces ten trwa dopóki nie zostanie znaleziony mecz, albo jest jasne, że element nie znajduje się w tabeli. Patrząc na numery pozycji w naszym przykładzie zupy, wyszukiwanie binarne przebiegnie w ten sposób, aby znaleźć dopasowanie do numeru 27: Klauzula użytkowania Klauzula UŻYTKOWANIA określa format elementu danych w pamięci komputera lub w pliku. W pewnych okolicznościach format pliku plików danych może różnić się od formatu pamięci komputera, określonego klauzulą ​​USAGE. Może to wystąpić, gdy interfejsy są dostępne za pośrednictwem interfejsu, gdy systemy plików innych niż COBOL z różnymi formatami przechowywania danych są dostępne. Na przykład Acu4GL używa SQL do uzyskiwania dostępu do systemów plików innych niż COBOL iw trakcie przetwarzania danych. Uwaga: istnieją liczne opcje kompilatora mające wpływ na zachowywanie danych. Zobacz Opcje przechowywania danych w sekcji Zgodność z ACUCOBOL-GT. Kolumna po lewej stronie zawiera zatwierdzone skróty dla pojęć po prawej stronie: Klauzula USAGE może być użyta w dowolnym wpisie w opisie danych, z wyjątkiem tych z numerami 66, 78 i 88. Klauzula UŻYTKOWANIA nie może być używana z zewnętrznym pozycja danych zmiennoprzecinkowych. Jeśli klauzula USAGE znajduje się w pozycji opisu danych dla elementu grupy, wówczas wszystkie klauzule USAGE, które pojawiają się w podrzędnych wpisach, muszą być tego samego typu. Ciąg PICTURE komponentów COMP, COMP-1, COMP-2, COMP-3, COMP-4, COMP-5, COMP-6, BINARY lub PACKED-DECIMAL może zawierać tylko symbole 9, S, V i P. Elementy COMP-6 nie mogą używać symbolu S. Ciąg PICTURE elementu COMP-X lub COMP-N może zawierać tylko wszystkie 9 symboli lub wszystkich symboli X. Wpisu danych do elementu danych UŻYTKOWNIKA INDEX nie może zawierać żadnej z poniższych klauzul: BLANK ZWIERZĘTAJ, ZEZWOLONY, ZDJĘCIA, I WARTOŚĆ. Elementu Poziom 88 nie można określić dla pozycji danych UŻYTKOWNIKA. Wpisu danych do elementu danych PODKŁADU UŻYTKOWNIKA nie może zawierać żadnej z poniższych klauzul: BLANK ZWIERZĘTA, ZDALIZOWANA lub ZDJĘCIA. Element danych POINTER może zawierać klauzulę wartości dla niej, ale wartość musi być słowem NULL. Wpisu danych do pozycji użytkowej FLOAT lub pozycji danych PODSTAWY UŻYTKOWNIKA nie może zawierać żadnej z poniższych klauzul: BLANK ZWIERZĘTAJ, ZDECYDOWANIEM lub ZDJĘCIA. Elementy danych FLOAT lub DOUBLE mogą zawierać klauzulę wartości. Wartością może być literał zmiennoprzecinkowy, literał liczbowy lub słowo ZERO. Poniżej przedstawiono przykładowe dane z sekcji Working-Storage Section: Poniższe nazwy są nazywane typami danych w stylu C: SIGNED-INT, UNSIGNED-INT, SIGNED-SHORT, ZANIECHOWANE-KRÓTKIE, POZYCJONOWANE, DŁUGIE ZDARZONE. Te typy danych są podobne do typów danych znalezionych w języku programowania C. Wpis danych dla typu danych w stylu C nie może zawierać żadnej z poniższych klauzul: BLANK ZMIEŃ, ZDALIZOWANY lub ZDJĘCIA. Typ sterowania to jeden z graficznych nazw typów sterowania znanych kompilatorowi, takim jak LABEL lub ENTRY-FIELD, lub nazwa ActiveX, COM lub kontrola. Wprowadzenie danych do pozycji danych Zużytych danych nie może zawierać żadnej z poniższych klauzul: BLANK ZWIERZĘTAJ, UZNAWANY lub ZDJĘCIA. Jeśli zawiera klauzulę VALUE, określona wartość musi być słowem NULL. Nazwa czcionki jest jednym z następujących identyfikatorów: DEFAULT-FONT, FIXED-FONT, TRADYCYJNE-FONT, SMALL-FONT, MEDIUM-FONT, LARGE-FONT. Należy zauważyć, że opcja - Df lub - Cv spowoduje, że kompilator odpowiednio traktuje COMP-1 i COMP-2 jako FLOAT i DOUBLE. Więcej informacji można znaleźć w sekcji 5.4 w części Przejście do ACUCOBOL-GT. Nazwa układu jest nazwą jednego ze standardowych menedżerów układu. Obecnie może to być LM-RESIZE. Klauzula UŻYTKOWANIA zapisana na poziomie grupy dotyczy wszystkich elementarnych elementów podrzędnych podrzędnych. Jeśli nie określono klauzuli USAGE, to użyjesz WYKORZYSTANIE JEST WYŚWIETLACZEM. Wewnętrznym formatem pozycji WYŚLIJ WYŚWIETLANIE jest ASCII. Format elementu indeksu jest 32-bitowym podpisem binarnym. Jego rozmiar wynosi zawsze cztery i zawiera zakres wartości od -2147483647 do 2147483647. Jeśli używasz przełącznika kompilacji dla zgodności z wersjami przed 6.0.0 (-Z52 na przykład), indeksem jest 16-bitowy unsigned binary, size jest zawsze dwa i zawiera wartości od 0 do 65535. Format elementu danych COMP-1 to 16-bitowy podpisany binarny. Wartości prawne wahają się od -32767 do 32767. Wielkość elementu danych wynosi zawsze dwa bajty, a pół-wysoka część danych jest przechowywana w lewym bajcie. Ciąg PICTURE, który opisuje ten element, nie ma znaczenia. W przeciwieństwie do innych typów danych liczbowych, w przypadku danych COMP-1, COMP-X lub COMP-N wystąpi błąd rozmiaru tylko wtedy, gdy wartość przekracza fizyczne składowanie elementu (innymi słowy, liczba 9s elementów ZDJĘCIE jest ignorowane w przypadku określenia rozmiaru błędu). Dla COMP-2 (przechowywanie dziesiętne) każda cyfra jest zapisywana w jednym bajt w formacie dziesiętnym. Jeśli wartość jest podpisana, to przydzielany jest dodatkowy bajt końcowy dla znaku. Przechowywanie COMP-2 jest identyczne z USART DISPLAY z wieloma rzędami czterech bitów pozbawionych każdego bajtu. W przypadku COMP-3 (przechowywanie dziesiętne w pakietach) w każdym bajcie zapisywane są dwie cyfry. Dodatkowy pół-bajt jest przydzielony do oznaczenia, nawet jeśli wartość jest niepodpisana. Znak znajduje się w najbardziej wysuniętej na najwyższym miejscu, a jego wartość wynosi 0x0D dla ujemnych pozostałych wartości traktowanych jako dodatnie (ale patrz zasada 18 poniżej). Rozmiar elementu (w tym jeden dla oznaczenia domyślnego) dzielony jest przez dwa, aby osiągnąć jego rzeczywisty rozmiar (zaokrąglanie frakcji w górę). Formatem elementu COMP-4 jest binarny dwójkowo-uzupełniający (wartość bez jego przecinka dziesiętnego). Wartości COMP-4 są przechowywane w formacie niezależnym od urządzenia. Ten format umieszcza najbardziej najwyższą część wartości w najbardziej wysuniętej na lewą pozycję i idzie w dół do części niskiej rzędu w najbardziej wysuniętej na najwyższym miejscu. Liczba bajtów zajmowanych przez dany element zależy od liczby 9 w obrazie i na temat różnych opcji kompilacji. Na przykład może być więcej niż osiemnaście lat dziewięćdziesiątych tylko wtedy, gdy Twój program został skompilowany pod kątem 31-cyfrowego wsparcia. Jest to podsumowane w poniższej tabeli: Uwaga: Jeśli podano dwie wartości, mała wartość dotyczy niepodpisanych danych, a większa wartość dotyczy podpisanych elementów danych. COMP-5 jest używany przede wszystkim do komunikacji z zewnętrznymi programami, które oczekują macierzystego przechowywania danych. Format elementu danych COMP-5 jest identyczny z danymi danych COMP-4, z tym że dane są przechowywane w formacie zależnym od maszyny. Jest on przechowywany w porządku, który jest naturalny dla hosta. Na przykład obiekt danych PIC S9 (9) COMP-5 jest odpowiednikiem 32-bitowego słowa binarnego na komputerze hosta, a pozycja PIC S9 (20) COMP-5 jest odpowiednikiem słowa 64-bitowego. Uwaga: Dane przechowywane w polu COMP-5 nie mogą być przenoszone na inne maszyny, ponieważ różne maszyny mają różne naturalne kolejności bajtów. Na wielu maszynach (68000, większość RISC), COMP-5 jest identyczny z COMP-4. W innych (80x86, VAX) jest tożsamy ​​z bajtami w odwrotnej kolejności. Klauzula VALUE dla elementu danych COMP-5 jest przechowywana w formacie niezależnym od urządzenia i jest dostosowywana, gdy jest ładowana do elementu danych. Zapewnia to, że wartość jest taka sama z maszyny do maszyny. W sklepach arytmetycznych i niehandlowych do pozycji COMP-5, jeśli wymagane jest obcięcie, domyślnie ACUCOBOL-GT obcina liczbę dziesiętną do liczby cyfr podanych w klauzuli PICTURE. Można użyć opcji kompilatora --TruncANSI, aby zmusić obcięcie w formacie binarnym do pojemności alokowanej pamięci elementów COMP-5. Opcja - Dz i --noTruncoptions również powodują obcięcie. Więcej informacji można znaleźć w książce 1, rozdział 2.1.9, Opcje przechowywania danych. Elementy danych poziomu 01 i 77, które są COMP-5, są automatycznie synchronizowane z odpowiednią granicą maszyny, niezależnie od ustawień kompilacji. Pozwala to bezpiecznie przekazywać te elementy do podprogramów C bez konieczności obawiania się. Jeśli COMP-5 jest używany z elementem danych PIC X (n) i przypisany do wartości alfanumerycznej, wyniki są nieokreślone. Na przykład poniższy fragment kodu powoduje, że NUM ma niezdefiniowaną liczbę, a wartość końcowa ostatniej linii wynosi 100: nie można podpisać elementu danych PIC X (n) używanego z COMP-5. Format elementu COMP-6 jest identyczny z elementem COMP-3, z wyjątkiem tego, że jest on niepodpisany i nie ma miejsca na znak. Jeśli liczba cyfr jest nieparzysta, na lewym końcu numeru jest dodawany zero, zanim zostanie zapakowany. Są więc dwie cyfry dziesiętne na bajt, a rzeczywisty rozmiar elementu jest określany przez podzielenie jego rozmiaru obrazu o dwa i zaokrąglanie. Element danych COMP-X musi być opisany za pomocą ciągu tekstowego zawierającego tylko 9 lub tylko symbole X. W obu przypadkach element danych jest traktowany jako niezerowa binarna liczba całkowita, z wewnętrzną pamięcią podobną do danych elementu danych COMP-4. Jeśli do opisu elementu użyto symboli X, liczba bajtów przydzielonych do elementu jest taka sama, jak liczba symboli X w ciągu obrazu. Jeśli zamiast 9 symboli użyto symboli, to liczba przydzielonych bajtów jest najmniejszą liczbą bajtów potrzebnych do zachowania tej liczby. Na przykład element danych PIC 99 zostanie przydzielony 1 bajtowi, pozycja danych PIC 9 (9) zostanie przydzielona na 4 bajty. Niezależnie od liczby 9 symboli w ciągu obrazów elementu, maksymalna wartość, którą można zapisać w pliku COMP - X element jest określany przez liczbę przydzielonych bajtów (maksymalnie 18 cyfr lub maksymalnie 31 cyfr, jeśli obowiązuje 31-cyfrowe wsparcie). Na przykład element COMP-X składający się z 1 bajtu może zawierać zakres liczb od 0 do 255. Dwójkowy numer COMP-X może zawierać od 0 do 65535. Błąd rozmiaru występuje w elemencie COMP-X tylko wtedy, wartość jest większa niż element fizyczny. Kiedy COMP-X jest używany z pozycją danych PIC (X), maksimum to PIC X (8). (To maksymalne zwiększenie do PIC X (16), gdy działa 31-cyfrowe wsparcie). Element danych COMP-N jest identyczny z danymi danych COMP-X, z tym że dane są zapisywane w macierzystym formacie urządzenia hosta, zamiast formatu niezależnego od maszyny. Elementy danych opisane jako PACKED-DECIMAL są identyczne z COMP-3. Możliwe jest, że unsigned PACKED-DECIMAL można traktować jako COMP-6 za pomocą opcji kompilacji. Domyślnie pozycja danych binarnych jest identyczna z danymi danych COMP-4. Opcja kompilacji czasu - D5 traktuje elementy danych BINARY jako elementy COMP-5. W trybie zgodności VAXCOBOL element danych COMP jest taki sam, jak COMP-4 i jest traktowany jako dane binarne. W trybie kompatybilności z RMCOBOL kompresja jest taka sama jak COMP-2. Za pomocą opcji kompilacji można zmienić domyślne zachowanie. Element danych wskaźnika jest traktowany jako element danych niepodpisanych. Format wewnętrzny różni się dla każdej maszyny. Elementy danych wskaźników są przeznaczone do przechowywania adresów innych elementów danych (patrz instrukcja SET). Element danych wskaźnika może zawierać określoną klauzulę VALUE, ale określona wartość musi być słowem NULL. Oznacza to, że wskaźnik nie wskazuje obecnie żadnego elementu. Jeśli wskaźnik nie ma wyraźnej wartości początkowej, to jej początkowa wartość jest dowolna. Elementy danych danych zajmują 8 bajtów. Zapewnia to wystarczająco dużo miejsca, aby utrzymać adres na 64-bitowej maszynie. Jeśli pracujesz na mniejszej maszynie, środowisko wykonawcze używa tylko pierwszych 4 bajtów elementów danych wskaźników (pozostałe 4 bajty pozostają w pamięci, pozostają niewykorzystane). Możesz użyć opcji - Dw kompilacji czasu, aby dostosować przestrzeń przydzieloną do elementów danych wskaźników. Można to zrobić, aby zaoszczędzić pamięć, jeśli wiesz, że nie będzie działać na 64-bitowej maszynie. Wskaźniki mogą być użyte w wyrażeniach warunkowych, gdzie można je porównywać ze sobą lub do wartości NULL. Porównanie wskaźnika musi być równe lub nie równe (większe i mniejsze niż porównania są niedozwolone). Elementy danych poziomu 01 i 77, które są punktami POINTER, są automatycznie synchronizowane z odpowiednią granicą maszyny, niezależnie od ustawień kompilacji. Pozwala to bezpiecznie przekazywać te elementy do podprogramów C bez konieczności obawiania się. Z wyjątkiem automatycznej synchronizacji, elementy danych PODSTAWY UŻYTKOWNIKA są traktowane we wszystkich aspektach, np. UŻYTKOWNIKA ZDOSTĘPNIONE-DŁUGIE. Obsługuje prawidłowo wszystkie bieżące maszyny. To zachowanie może się zmienić w celu spełnienia wymagań przyszłych maszyn. Pozycje danych zmiennoprawnych są przechowywane w formacie zależnym od maszyny. Użyteczne elementy FLOAT mają 4 bajty przydzielone im. UŻYTKOWNIKA PODWÓJNE elementy zajmują 8 bajtów. Rejestrowane elementy danych 01 i 77, które są wykorzystywane do pływania lub DOUBLE są automatycznie synchronizowane z odpowiednimi granicami maszyny, niezależnie od ustawień kompilacji. Pozwala to bezpiecznie przekazywać te elementy do podprogramów C bez konieczności obawiania się. Definicja ANSI w języku COBOL nie określa, w jaki sposób znaki powinny być przechowywane w polach numerycznych (z wyjątkiem przypadków ZNAKOWANIE ODDZIELNE). ACUCOBOL-GT umożliwia wybór alternatywnych schematów przechowywania danych, korzystając z opcji kompilacji czasu - Dca, - Dcb, - Dci, - Dcm, - Dcn, - Dcr i - Dcv. Określenie konwencji dotyczącej przechowywania danych jest czasem użyteczne podczas eksportowania i importowania danych. Aby uzyskać dodatkowe informacje, zobacz Podręcznik użytkownika, sekcja 2.2.10, Opcje magazynowania danych. Konwencja dotycząca przechowywania dotyczy sposobu wyświetlania danych w typach danych użytkowania, typu COMP-2 i COMP-3. W USARTIE WYŚWIETLACZA, standardowe przechowywanie ASCII, jeśli znak jest włączony do cyfry, cyfra jest kodowana zgodnie z poniższą tabelą: Pozycje oznaczone gwiazdką oznaczają elementy o stałej wielkości. Element o stałej wielkości jest taki sam, niezależnie od maszyny docelowej. Wpisy bez gwiazdek są zmienne. Te elementy zajmują przestrzeń do liczby bajtów wymienionych w tabeli. Uwaga: Wymiary wymienione w powyższej tabeli obejmują wszystkie bieżące i przewidywane maszyny, które uruchamiają ACUCOBOL-GT. Przyszłe architektury mogą wymagać zmian w maksymalnym rozmiarze przypisanym do tych elementów. W środowisku wykonywania te elementy działają na wszystkie sposoby tak, jakby były elementami danych o stałej wielkości o odpowiedniej wielkości. Na przykład następujący fragment kodu: wydruk 4 podczas pracy na komputerze 32-bitowym, ale będzie drukować 8 podczas pracy na komputerze 64-bitowym. W poniższych przykładach każdy bajt jest reprezentowany przez dwie szesnastkowe cyfry lub pojedynczy cytowany znak. Każda wartość jest wyświetlana w różnych formatach. Pokazane jest również WYBÓR WYŚWIETLANIA przy użyciu różnych opcji SIGN. Poniższe przykłady wykorzystują domyślne konwencje dotyczące przechowywania informacji o znakach ACUCOBOL-GT. Elementy danych HANDLE tworzą własną klasę danych i kategorię w języku COBOL. Wewnętrznie są zapisywane jako wartości całkowite i zachowywać się jak liczby, gdy są używane. Element danych HANDLE jest zwykle używany do przechowywania uchwytu dynamicznie utworzonego obiektu, takiego jak okno pływające lub elementy sterowania graficznego. Elementy danych HANDLE są w dwóch formach: typ i ogólny. Tworzysz ogólny uchwyt, pomijając wyrażenie OF. Po dodaniu wyrażenia OF możesz utworzyć wpisany uchwyt. Możesz używać elementów danych HANDLE tylko wtedy, gdy jawnie zezwoli, lub jako część instrukcji MOVE, instrukcji CALL (jako parametr) lub w wyrażeniu Boole'a. Ogólne uchwyty mogą być użyte w każdej sytuacji, gdy uchwyty są dozwolone. Jeśli używasz uniwersalnego uchwytu jako źródła instrukcji MODIFY, w tej instrukcji nie będzie można użyć żadnych właściwości właściwości lub nazw stylu. Dzieje się tak, ponieważ ogólny uchwyt może być związany z dowolnym rodzajem kontroli. W takim przypadku kompilator nie może określić, który zbiór nazw stylu i właściwości jest poprawny. Wywoływane uchwyty mogą być użyte w instrukcjach, w których dozwolone są uchwyty lub gdy odnoszą się do obiektu typu dopasowania. Na przykład HANDLE OF WINDOW nie można używać jako uchwytu w instrukcji DISPLAY LABEL. Zamiast tego musisz użyć albo uniwersalnego uchwytu lub HANDLA ETYKIETA. Wywoływane uchwyty pozwalają kompilatorowi na rozpoznawanie skojarzonych nazw stylu i właściwości, jeśli to właściwe. Opisane uchwyty poprawiają również czytelność Twojego programu, dostarczając dodatkowe informacje o zamierzonym używaniu uchwytu, oprócz sprawdzania kompilacji, aby upewnić się, że używasz uchwytów w odpowiednich sytuacjach. Uchwyty mogą być używane w porówna - niach. Są tylko dwa znaczące porównania: sprawdzanie równości lub nierówności do NULL oraz porównanie z innym elementem danych uchwytów. Wartość uchwytu NULL zawsze wskazuje nieprawidłowy uchwyt. Uchwyty są przechowywane wewnętrznie jako 4-bajtowe binarne liczby całkowite. Te informacje mogą być przydatne podczas debugowania programu (można sprawdzić wartości uchwytów w debugerze). Nie powinieneś jednak polegać na tej definicji w Twoim programie, ponieważ może to zmienić się w przyszłości. Uchwyty danych są automatycznie synchronizowane na 4-bajtowej granicy. Należy zauważyć, że tak się dzieje niezależnie od ustawienia opcji kompilacji - Dl (co ogranicza ilość synchronizacji). System wykonawczy wymaga tego poziomu wyrównywania, aby uniknąć generowania błędów magistrali na niektórych komputerach. Jeśli podano nazwę czcionki, element danych opisany przez klauzulę UŻYTKOWANIA jest inicjowany podczas uruchamiania programu z odpowiednim uchwytem czcionki. Działa identycznie jak w przypadku umieszczenia instrukcji: na początku programu, w którym element danych jest pozycją danych opisaną przez klauzulę USAGE, a nazwa czcionki jest taka sama jak nazwa-czcionka w klauzuli USAGE. Wewnętrzna reprezentacja danych może być ważnym czynnikiem wpływającym na wydajność programu. Niestety domyślna reprezentacja używana przez COBOL dla danych liczbowych może negatywnie wpłynąć na szybkość obliczeń. Bardziej wydajny format danych numerycznych można określić przy użyciu klauzuli USAGE. Jednostka ta wprowadza koncepcję wewnętrznych reprezentacji danych, omawia domyślną reprezentację używaną w COBOL i przedstawia, jak ta reprezentacja, używana w danych liczbowych, może powodować nieefektywność. Składnia klauzuli USAGE została podana i wyjaśniono różne opcje. Wprowadza się klauzulę SYNCHRONIZOWANE i uogólniony przykład. Cele Na koniec tego urządzenia powinieneś - Znać, że tekst jest przechowywany w komputerze przy użyciu pewnej sekwencji kodowania. Zrozumieć problemy spowodowane przechowywaniem danych liczbowych jako cyframi ASCII. Mogą używać klauzuli USAGE w celu zmiany sposobu przechowywania danych liczbowych w komputerze. Zaznacz się, kiedy i jak używać klauzuli SYNCHRONIZED. Wymagania wstępne Wprowadzenie do COBOL Deklarowanie danych w COBOL Podstawowe procedury Wydziały Polecenia Wybór w COBOL Iteracja w COBOL Wprowadzenie do plików sekwencyjnych Przetwarzanie plików sekwencyjnych Odczytywanie plików sekwencyjnych Edytowane obrazy Komputery zapisują swoje dane w postaci cyfr binarnych. Oprócz liczb kardynalnych (dodatnich liczb całkowitych) wszystkie inne dane przechowywane w pamięci komputera wykorzystują pewien rodzaj konwencji formatowania. Na przykład dane tekstowe są przechowywane przy użyciu sekwencji kodującej, takiej jak ASCII lub EBCDIC. System kodowania jest po prostu konwencją, która określa, że ​​określony zestaw bitów ma być używany do reprezentowania określonego znaku. Na przykład na poniższym diagramie przedstawiono konfigurację bitów, która służyła do reprezentowania górnej litery Quot w ASCII i sekwencjach kodujących EBCDIC. Dane liczbowe mogą być przechowywane jako cyfry tekstowe (cyfry ASCII) lub jako czyste numery binarne (w przypadku wartości kardynalnych) lub jako dwójki uzupełniają liczby binarne (w przypadku liczb całkowitych) lub jako liczby dziesiętne (przy użyciu BCD) lub jako liczb rzeczywistych (przy użyciu formatu liczb rzeczywistych, np. specyfikacji IEEE dla numerów zmiennoprzecinkowych). Klauzula UŻYTKOWNIKA służy do określania sposobu przechowywania danych w pamięci komputera. Każda zmienna zadeklarowana w programie COBOL ma klauzulę USAGE - nawet jeśli nie określono klauzuli jednoznacznej. Jeśli nie ma wyraźnej klauzuli USAGE, zastosowany jest domyślny - USAGE IS DISPLAY -. Problemy z korzystaniem z ekranu Szybkość nowoczesnych komputerów oznacza, że ​​trudno jest spróbować użyć klauzuli USAGE, chyba że dane będą używane w tysiącach obliczeń. Ze względu na przenośność klauzula USAGE nie powinna być używana w opisach rekordów. Jeśli plik jest odczytywany na innym komputerze nie mamy gwarancji, że dane będą interpretowane prawidłowo. Nawet na tym samym komputerze, użycie klauzuli USAGE w opisach zapisów oznacza, że ​​dane w pliku prawdopodobnie nie będą rozumiane przez inne języki programowania, programy użytkowe lub edytory tekstowe. W przypadku elementów tekstowych lub elementów numerycznych, które nie będą używane w obliczeniach (Numery kont, numery telefonów itp.), Domyślne ustawienie WYKORZYSTANIE EKSPLOATACJI nie ma problemów, ale w przypadku elementów numerycznych, na których ma być wykonywane pewne obliczenia domyślne użycie nie jest najbardziej wydajnym sposobem przechowywania danych. Kiedy numeryczne elementy (PIC 9 pozycji) mają zastosowanie DISPLAY. są zapisywane jako cyfry ASCII (patrz cyfry ASCII 0-9 w tabeli ASCII poniżej). Rozważmy następujący fragment programu. Co by się stało, gdyby obliczenia były wykonywane bezpośrednio na numerach przechowywanych w tym formacie Ponieważ żaden z elementów danych nie ma wyraźnej klauzuli USAGE, którą domyślnie ustawiłeś - Użyj ekranu DISPLAY. Oznacza to, że wartości w zmiennych Num1, Num2 i Num3 są zapisywane jako cyfry ASCII. Jak oblicza się powyższe obliczenia Jeśli przejrzysz tabelę ASCII poniżej, zobaczysz, że cyfra 4 (wartość w Num1) jest zakodowana jako 00110100, a cyfra 1 jest zakodowana jako 00110001. Gdy te liczby binarne są dodane razem wynik wynosi 01100101, który jest kodem ASCII dla małej litery cytatu. Suma 4 1 e nie oblicza się. Kiedy obliczenia są wykonywane z elementami danych numerycznych, których używanie jest wyświetlane, komputer musi przekształcić wartości liczbowe na ich binarne ekwiwalenty, zanim można dokonać kalkulacji. Gdy wynik został obliczony, komputer musi przekształcić je w cyfry ASCII. Konwersja do iz cyfr ASCII spowalnia obliczenia. Z tego powodu dane silnie zaangażowane w obliczanie są często zadeklarowane przy użyciu jednej z zastosowań zoptymalizowanych do obliczeń, takich jak ZASOBY KOMPUTEROWE. Elementy grupy są zawsze traktowane jako alfanumeryczne, co może powodować problemy, gdy istnieją podrzędne pozycje COMP. Załóżmy na przykład, że mamy takie stwierdzenie jak: MOVE ZEROS TO GROUP2. w programie przeciwnym. Na powierzchni wygląda to tak, jakby ta instrukcja przesuwa wartość numeryczną 0 do NumItem1 i NumItem2, ale to, co jest rzeczywiście przeniesione do tych elementów to cyfra ASCII quot0quot. Kiedy próbujesz użyć NumItem1 lub NumItem2 w kalkulacji, program się zawiedzie, ponieważ te dane zawierają nieparzyste dane. Klauzula USAGE może być użyta z dowolnym wpisem w opisie danych, z wyjątkiem tych z numerami poziomów 66 lub 88. Gdy klauzula USAGE zostanie zadeklarowana dla elementu grupy, określone zużycie jest stosowane do każdego elementu grupy. Element grupy jest nadal traktowany jako element danych alfanumerycznych (patrz przykładowy program poniżej).USJA JEST COMPUTATION lub COMP lub BINARY są synonimami siebie. SERTY UŻYTKOWNIKA INDEKS służy do zapewnienia zoptymalizowanego indeksu tabeli. Gdy tabela jest celem instrukcji SZUKAJ, musi zawierać powiązany element indeksu (patrz samouczek wyszukiwania). Każda pozycja zadeklarowana z UŻYTKOWANIEM INDEKS może być wyświetlana tylko w: - instrukcji SEARCH lub SET - relacji relacji - wyrażeniu UŻYTKOWNIKA DIVISION PROCEDURY - wyrażenia USING instrukcji CALL Ciąg obrazowy elementu COMP lub PACKED-DECIMAL może zawierają tylko symbole 9, S, V i P. Klauzula obrazu używana dla pozycji COMP lub PACKED-DECIMAL musi być liczbowa. 1QuadWord (8 Bajtów) PACKED-DECIMAL Elementy danych zadeklarowane jako PACKED-DECIMAL przechowywane są w formacie dwójkowym z binarnym kodem dziesiętnym (BCD). Zamiast reprezentować wartość jako pojedynczą liczbę binarną, binarna wartość każdej cyfry jest trzymana w przebijaniu (pół bajtu). Znak znajduje się w oddzielnym przebijaniu w najmniej znaczącej pozycji przedmiotu (patrz rysunek poniżej). Ogólne notatki USAGE Klauzula USAGE to jedna z dziedzin, w których wiele sprzedawców wprowadziło rozszerzenia do standardu COBOL. Nie jest rzadkością widzieć COMP-1. COMP-2. COMP-3. COMP-4. Elementy użycia COMP-5 i POINTER w programach napisanych przy użyciu tych rozszerzeń. Pomimo, że COMP-1 i COMP-2 są rozszerzeniami standardu COBOL, dostawcy wydają się używać identycznych reprezentacji dla tych zwyczajów. COMP-1 jest zwykle definiowany jako pojedyncza precyzja, liczba zmiennoprzecinkowa, zgodna ze specyfikacją IEEE dla takich liczb (Real lub Float w językach pisanych), a COMP-2 jest zwykle definiowana jako podwójna precyzja, zmiennoprzecinkowy numer (LongReal lub Double w językach pisanych). Klauzula SYNCHRONIZOWANA Klauzula SYNCHRONIZOWANA jest czasami używana z elementami WYKORZYSTANIE JEST KOMPASERAMI lub UŻYTKOWNIKA JEST INDEKS. Służy do optymalizacji szybkości przetwarzania, ale robi to kosztem zwiększonych wymagań dotyczących przechowywania. Wiele wspomnień komputerowych jest organizowanych w taki sposób, że istnieją naturalne granice adresowania - takie jak granice wyrazów. Jeśli nie zostaną podjęte żadne specjalne działania, niektóre elementy danych w pamięci mogą sięgać do granic tez. Może to spowodować narzut przetwarzania, ponieważ procesor może potrzebować dwóch cykli pobierania, aby pobrać dane z pamięci. Klauzula SYNCHRONIZOWANA służy do wyraźnego wyrównywania elementów COMP i INDEX wzdłuż naturalnych granic wyrazów. Bez klauzuli SYNCHRONIZED elementy danych są wyrównane do granic bajtów. Słowo SYNC może być używane zamiast SYNCHRONIZOWANE. Efekt klauzuli zsynchronizowanej zależy od implementacji. Będziesz musiał przeczytać podręcznik producenta, aby sprawdzić, jak działa on na Twoim komputerze (w niektórych przypadkach może nie mieć wpływu). Aby zilustrować, jak działa klauzula SYNCHRONIZOWA, przypuśćmy, że program COBOL działa na komputerze zorientowanym na słowa, na którym jednostka CPU pobiera dane z pamięci pojedynczo. W tym programie chcemy wykonać obliczenia na numerze zapisanym w zmiennej TwoBytes (zgodnie ze schematem poniżej). Ze względu na zadeklarowanie elementów danych liczba przechowywana w TwoBytes przecina granicę wyrazu. Aby użyć numeru, jednostka centralna musi wykonać dwa cykle pobierania - jedna, aby uzyskać pierwszą część numeru w programie Word2, a druga, aby uzyskać drugą część numeru w programie Word3. To podwójne pobieranie spowalnia spowalnianie. 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. Wszelkie prawa zastrzeżone. 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

Popular Posts