Masz 2 problemy.
COBOL ma kilka struktur danych numerycznych. Każdy ma swój własny zestaw zasad.
Dla PONOWNEJ DECYDUJĘ (COMP-3)
• Składniki numeryczne klauzuli PIC powinny ZAWSZE sumować się do numeru ODD. • Znacznik dziesiętny "V" określa położenie kropki dziesiętnej. • Poszczególne elementy MOVE i funkcje matematyczne zachowają wyrównanie wartości dziesiętnych - możliwe jest obcięcie wysokiego i niskiego poziomu • Konwersja typu danych liczbowych (strefa dziesiętna na spakowaną & binarna do spakowanej) jest obsługiwana.
np. S9 (5) V9 (2) COMP-3.
tym pozycjach 2 dziesiętnych> Długość oblicza się zaokrąglić [(7 + 1)/2] = 4 bajty
S9(6)V9(2) COMP-3.
tym pozycjach 2 dziesiętnych> Długość oblicza się w postaci okrągłych UP [(8 + 1)/2] = 5 bajtów Ale 1 ½ bajta jest adresowalny
Ostatni ½ bajta pól COMP-3 jest HEXIDECIMAL reprezentacją znaku.
Wartości ½ znaku w bajtach to C = znak dodatni D = znak ujemny F = niepodpisany (bez COBOL).
S9 (6) V9 (3) WARTOŚĆ COMP-3 123.45. Długość jest obliczana jako ROUND UP [(9 + 1)/2] = 5 bajtów
Zawiera X'00 01 23 45 0C '
Uwaga wyrównanie dziesiętne & zero dopełnienie.
poziomie grupy zasady MOVE
struktur terenowych COBOL danych to określić jako struktury hierarchiczne.
Pole grupa 01 HL - & każdy poziom pola podgrupa -
- jest prawie zawsze dorozumiana CHARAKTER wartość ciągu
- Jeśli osoba pole elementem jest 01 lub 77 poziom - to może być numeryczne.
- Poszczególne pola elementów zdefiniowane jako cyfry na poziomie grupy lub podgrupy będą traktowane jak cyfry, jeśli zostaną określone jako pole elementu Indywidualnego.
- Obowiązują zasady numeryczne. o prawym uzasadnić o, miejsc dziesiętnych wyrównanie O podkładka H-L (½ bajtów) zerami typu O dane liczbowe konwersji
Pole odbiorczy obliczeń MOVE lub matematyczny określa, czy wystąpi numeryczny konwersji danych.
Numeryczna konwersja danych Jeśli wykonujesz MOVE lub wykonasz obliczenia matematyczne przy użyciu dowolnego typu pola wysyłania (grupa lub element) do dowolnego pola odbierającego indywidualnego elementu zdefiniowanego za pomocą numerycznej klauzuli PIC ---, wówczas nastąpi konwersja danych liczbowych dla odbiorcy pole. S0C7 ulega uszkodzeniu, gdy dane inne niż numeryczne to MOVE 'd do odbierającego pole liczbowo zdefiniowane LUB gdy obliczenia matematyczne są wykonywane przy użyciu danych nieliczbowych.
Brak konwersji danych liczbowych Po przeniesieniu dowolnego typu pola (grupy lub elementu) do dowolnego pola poziomu grupy lub podgrupy, NIE będzie konwersji danych liczbowych.
• Obowiązują zasady MOVE dotyczące znaków.
• Wyrównanie w lewo: & pad ze spacjami.
Jest to jedna z głównych przyczyn danych nieliczbowych w polu liczbowo zdefiniowanym.
Jednym z podstawowych zastosowań PRZESUŃ na poziomie grupy wysyłającej zawierających pola elementów numerycznych do poziomu grupy odbiorczej zawierającej pola elementów numerycznych (odwzorowane identycznie) jest ponowna inicjalizacja liczbowych pól elementów za pomocą 1 instrukcji MOVE.
Maska wyczyść - lub - propagacja danych PRZESUŃ można również użyć do czyszczenia tabel - gdzie poziom grupy tabel jest większy niż 255 bajtów.
Człowieku, to zabiera mnie z powrotem. Pamiętam, kiedy chcieliśmy spojrzeć na ostatni bajt spakowanych pól dziesiętnych, ponieważ "04" oznaczało, że ktoś przeniósł wartość w przestrzeni EBCDIC. –
@ David Thornley. Zamknij ... Przestrzeń EBCDIC to szesnastkowo "40". Dzisiaj używamy testu 'IF NUMERIC' na spakowanych polach dziesiętnych, aby sprawdzić tego rodzaju rzeczy. Coś, co wprawia w zakłopotanie wielu programistów jest to, że 'MOVE' nie wysadza się w powietrze, ale każde obliczeniowe odniesienie do pola po tym kończy się dając wyjątek danych abend (SOC7 w IBM land). Większość ludzi oczekuje, że 'MOVE' je wysadzi w powietrze. – NealB
Nie tylko blisko: w dniu, w którym spakowaliśmy pola, ostatni bajt miał zamieniony węzeł, więc ciąg kończący 404040 hex zakończył się jako upakowane dziesiętne zakończenie 4404 hex. (To w rzeczywistości nie było COBOL, ale IBM 360 został specjalnie zaprojektowany do pracy w języku COBOL, z jedną instrukcją ASM, która wykonała sformatowany ruch, więc wyobrażam sobie, że moje doświadczenie ASM jest tu nieco istotne.) –