2009-04-27 11 views
5

मैं एक SSIS पैकेज बनाने रहा copybook फ़ाइलों की एक श्रृंखला से पैक डेटा में पढ़ने के लिए में दशमलव फील्ड्स पैक्ड। मुझे निम्नलिखित फ़ील्ड परिभाषाओं की सही व्याख्या के बारे में अनिश्चितता है और उम्मीद है कि किसी को पता होगा:की व्याख्या COMP -3 संख्यात्मक मान

FIELD-NAME-1 PIC S9 (15) V9 (3) COMP-3।
FIELD-NAME-2 PIC S9 (3) V9 (8) COMP-3।
FIELD-NAME-3 PIC S9 (3) V9 (6) COMP-3।

डेटा निश्चित चौड़ाई पाठ में संग्रहित है। ऊपर क्षेत्रों के लिए डेटा निम्नलिखित लंबाई है:

क्षेत्र NAME-1: 19 क्षेत्र NAME-2: 11 क्षेत्र NAME-3: 9

मैं अनिश्चित कैसे दशमलव व्याख्या करने के लिए कर रहा हूँ जगह और हस्ताक्षर करें।

किसी भी मदद की सराहना की जाएगी।

सधन्यवाद, हाम

उत्तर

2

ये हम चले:

पीआईसी है "तस्वीर"
S9 (15) का अर्थ है एक 15 अंकों सांख्यिक पर हस्ताक्षर किए क्षेत्र: हस्ताक्षर के लिए एस, 9 संख्यात्मक है, (15) लंबाई है। V दशमलव स्थिति 9 (3) एक तीन अंक संख्यात्मक

और COMP-3 बीसीडी एन्कोडेड दशमलव है। क्षेत्र के प्रत्येक nybble (आधा-बाइट), बाइनरी में दशमलव मान है, तो

0b01110110 (डुह)

"76" है।

18 अंक 9 बाइट्स की आवश्यकता है, पर हस्ताक्षर कम आदेश बाइट की कम nybble है।

जो मुझे चिंतित करता है, उन्हें बाइट्स की आवश्यकता होनी चाहिए।

यहाँ एक nice article on it है।

2

आमतौर पर कॉम्प -3 फ़ील्ड में BCD अंक होते हैं जो एक बार में बाइट्स में पैक होते हैं, प्रत्येक अंक एक निबल (4 बिट्स) का उपयोग करते हैं। पिछले अंक पिछले बाइट के ऊपरी निबल में चला जाता है। पिछले बाइट के निचले निबल 13 है यदि संख्या ऋणात्मक है, और कुछ और, (आमतौर पर 12) यदि सकारात्मक। दशमलव बिंदु निहित है।

उदाहरण के लिए, -1.2 हेक्स में इस तरह दिखता है, अंतिम डी नकारात्मक संकेत है।

01 2D 

12,345 है:

12 34 5C 
4

यहाँ आपके प्रश्नों का उत्तर में थोड़ा अलग प्रयास है।

पीआईसी S9 (15) V9 (3) COMP -3 इस तरह फ़ाइल में दिखता है:

00 00 00 00 00 00 00 00 00 0F 

यदि मान -४५६८२४८ था।323, यह होगा:

00 00 00 00 04 56 82 48 32 3D 

यह आपकी मदद नहीं करता है, लेकिन दूसरों की मदद कर सकता है। पैक नहीं किया गया पिछले मान दिखाई देगा:

F0 F0 F0 F0 F0 F0 F0 F0 F0 F4 F5 F6 F8 F2 F4 F8 F3 F2 D3 (or F3 as the last byte, therefore losing the sign) 

यह फ़ील्ड 15 (वास्तव में 16) दशमलव बिंदु से पहले अंक और 3 के बाद है।

हालांकि यह केवल 18 अंकों (15 + 3) का अनुरोध करता है, लेकिन यह संकेत के साथ एक लम्बाई क्षेत्र बनाने के लिए 1 9 हो जाता है (फ़ाइल पर 10 बाइट लंबा बनाने के लिए सामने वाला एक अंक)। सबसे अच्छा अभ्यास हमेशा इस भ्रम से बचने के लिए पैक किए गए फ़ील्ड को एक विषम लंबाई बनाना है।

** अंतिम पत्र चिह्न को दर्शाता है, सी & एफ सकारात्मक है, डी नकारात्मक है। अपने कार्यक्रम के लिए, नकारात्मक (डी) की जांच करें और यदि नहीं, तो सकारात्मक के रूप में व्यवहार करें।

** 'वी' एक अंतर्निहित दशमलव बिंदु है। यह फ़ाइल पर मौजूद नहीं है, लेकिन कोबोल जानता है कि यह गोल करने और ऐसे के लिए है। इसके लिए आपको प्रोग्रामेटिक रूप से खाते की आवश्यकता है। फाइल में कुछ भी नहीं है जिससे आप यह पहचानने में सहायता कर सकें कि यह कहां है या यदि यह भी मौजूद है।

अन्य दो फ़ील्ड पहले से ही अजीब लंबाई हैं, इसलिए जब पैक किया जाता है, तो संकेत के साथ, उन्हें एक लंबी अवधि में भी संग्रहीत किया जा सकता है।

कोई अन्य प्रश्न, अपना प्रश्न संपादित करें या टिप्पणियों में पूछें और कोई आपके लिए जवाब देने का प्रयास करेगा।

1

COMP -3 क्षेत्रों लंबाई की संख्या के रूप में गणना की जाती है (यह jrecord परियोजना jrecord.sf.net का हिस्सा है) अंक जिन्हें हमें + 1 से विभाजित करने की आवश्यकता है। उदाहरण के लिए मूल्य 987 के एक संख्यात्मक फ़ील्ड को स्टोर करने के लिए हमें 3 +1 को 2 = 2 से विभाजित करने की आवश्यकता होगी, इसलिए लम्बाई 2 बाइट्स का कॉम्प -3 फ़ील्ड +99 9 का मान संग्रहीत कर सकता है सीमा के रूप में 99 99 तक।

15 01 5 सी के रूप में संग्रहीत किया जाएगा। तो संख्या के अंतिम चार बिट्स का उपयोग सी या डी की संख्या को स्टोर करने के लिए किया जाता है, इसलिए "सी" सकारात्मक संख्या का प्रतिनिधित्व करता है और "डी" नकारात्मक संख्या का प्रतिनिधित्व करता है। और प्रत्येक संख्यात्मक संख्या स्वयं को प्रदर्शित करने के लिए 4 बिट लेती है।

तो 7 अंकों की संख्यात्मक संख्या के लिए 7 +1 = 8/2 = 4 बाइट आकार की आवश्यकता होगी। तो आकार 4 बाइट्स का comp-3 फ़ील्ड +999,9999 से -999,9999 अंकों के संख्यात्मक अंक संग्रहीत कर सकता है।

उपरोक्त प्रश्न के संदर्भ में संख्या के दशमलव भाग को स्थानांतरित करने के लिए एक चर को परिभाषित करने की आवश्यकता है जो केवल दशमलव भाग को स्टोर कर सकता है और उस फ़ील्ड को उस मान को स्थानांतरित कर सकता है जो केवल दशमलव भाग को पकड़ लेगा।

FIELD-NAME-3 PIC S9 (3) V9 (6) COMP-3 जैसे।

हमें DEC-PORTION V9 (6) comp-3 जैसे दशमलव फ़ील्ड को परिभाषित करने की आवश्यकता है और उसके बाद FIELD-NAME-3 को DEC-PORTION में मान के दशमलव भाग को बनाए रखने के लिए स्थानांतरित करें।

इस तरह हम पूर्ण संख्या से अलग संख्या का दशमलव भाग प्राप्त कर सकते हैं।

संबंधित मुद्दे