आह, बीसीडी के रूप में परिभाषित कर रहे हैं। अगर आपने इसे 6502 असेंबली में इस्तेमाल किया तो सम्मान करें।
बेशक, सबसे अच्छा शर्त है कि कोबोल मूव आपके लिए नौकरी करे! इन संभावनाओं में से एक मदद कर सकता है।
(संभावना # 1) मान लीजिए कि आपके पास मेनफ्रेम और स्रोत कोड तक पहुंच है, और आउटपुट फ़ाइल केवल आपके उपयोग के लिए है, प्रोग्राम को संशोधित करें, इसलिए यह केवल एक सादे अनपॅक किए गए पीआईसी एस 9 (7) के मान को चलाता है V99।
(संभावना # 2) मान लीजिए कि यह इतना आसान नहीं है, (उदाहरण के लिए, फ़ाइल अन्य पीजीएमएस के लिए इनपुट है, या कोड नहीं बदल सकता है), आप सिस्टम पर एक और COBOL प्रोग्राम लिख सकते हैं जो उस फ़ाइल को पढ़ता है और दूसरा लिखता है । इनपुट और आउटपुट फ़ाइलों के लिए नए प्रोग्राम में बीसीडी के साथ फ़ाइल रिकॉर्ड लेआउट को काटें और पेस्ट करें। आउटपुट संस्करण को गैर-पैक करने के लिए संशोधित करें। एक रिकॉर्ड पढ़ें, डेटा को स्थानांतरित करने के लिए 'आगे बढ़ें' करें, और ईओफ़ तक लिखें। फिर को फ़ाइल स्थानांतरित करें।
(संभावना # 3) यदि आप मेनफ्रेम को स्पर्श नहीं कर सकते हैं, तो आपने अपनी टिप्पणी में लिंक किए गए लेख में विवरण नोट करें। बीसीडी अपेक्षाकृत सरल है। यह इस तरह ही आसान (vb.net) हो सकता है:
Private Function FromBCD(ByVal BCD As String, ByVal intsz As Integer, ByVal decsz As Integer) As Decimal
Dim PicLen As Integer = intsz + decsz
Dim result As Decimal = 0
Dim val As Integer = Asc(Mid(BCD, 1, 1))
Do While PicLen > 0
result *= 10D
result += val \ 16
PicLen -= 1
If PicLen > 0 Then
result *= 10D
result += val Mod 16
PicLen -= 1
BCD = Mid(BCD, 2)
End If
val = Asc(Mid(BCD, 1, 1))
Loop
If val Mod 16 = &HD& Then
result = -result
End If
Return result/CDec(10^decsz)
End Function
मैं इस कॉल के कुछ बदलाव के साथ यह परीक्षण किया:
MsgBox(FromBCD("@" & Chr(13 + 16), 2, 1))
जैसे, -40.1 है। लेकिन कुछ ही। तो यह अभी भी गलत हो सकता है।
तो फिर अगर आपके कंप्यूटर अनुप्रयोग -3 शुरू होता है, कहते हैं, इनपुट रिकॉर्ड लेआउट की बाइट 10 पर, इस इसे हल होगा: बाइट्स की # के लिए डेटा-रूपांतरण लेख से फार्मूले को नोट करते हुए
dim valu as Decimal = FromBCD(Mid(InputLine,10,5), 7,2))
भेजने के लिए, और 9 के पहले और बाद में वी।
गोलाकार त्रुटियों से बचने के लिए परिणाम को दशमलव में स्टोर करें। एएसपी अगर यह $$$ है। फ्लोट & डबल आपको दुःख का कारण बन जाएगा! यदि आप इसे संसाधित नहीं कर रहे हैं, तो एक स्ट्रिंग भी बेहतर है।
बेशक यह कठिन हो सकता है। जहां मैं काम करता हूं, मेनफ्रेम प्रति बाइट 9 बिट्स है। गंभीर। यही कारण है कि पहली 2 संभावनाएं इतनी महत्वपूर्ण बनाती हैं। बेशक वास्तव में उन्हें बेहतर बनाता है यह तथ्य है कि आप एक पीसी केवल प्रोग्रामर हो सकते हैं और मेनफ्रेम प्रोग्रामर को आपके लिए काम करने के लिए यह एक बहुत अच्छा बहाना है! यदि आप इतना है कि विकल्प होता है करने के लिए भाग्यशाली रहे हैं ...
शांति, -al
पैक-दशमलव है EBCDIC प्रारूप का हिस्सा है, या यह सिर्फ एक फ़ाइल जो दोनों का उपयोग करने के लिए होता है? मैं उस प्रारूप से परिचित नहीं हूं, मुझे डर है :( –
यह एक फ़ाइल है जो दोनों का उपयोग करती है। यह बाइट्स को बचाने के लिए संख्याओं को निचोड़ने का पुराना स्कूल तरीका है। A-99999।99 4 बाइट्स में संग्रहीत किया जा सकता है। –
http://www.3480-3590-data-conversion.com/article-packed-fields.html –