سؤال

لا بد لي من إعداد ملف لكيان خارجي، ويستخدم هذا الكيان حاسب IBM المركزي مع COBOL ويتطلب تشفير الملف في EBCDIC.أقوم بإنشاء الملف في C#.أعتقد أن هذا سؤال من جزأين... أولاً، هل الكود أدناه كافٍ لضمان إنشاء الملف بطريقة يمكنهم قراءتها؟

StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));

ثانيًا، تتطلب العديد من الحقول في الملف نظامًا عشريًا معبأً، بالتنسيق S(9)13 COMP-3.نظرًا لأنني قمت بالفعل بتحديد تشفير EBCDIC، فهل يمكنني فقط كتابة الرقم العشري (على سبيل المثال:1234500000001) إلى الملف باستخدام:

sw.WriteLine("1234500000001C"); 

...وهل تظهر بشكل صحيح في الملف الذي تم إنشاؤه؟

لم تفعل أي شيء مطلقًا مع EBCDIC أو COMP-3.

هل كانت مفيدة؟

المحلول

يجب أن ينشئ هذا الرمز ملف EBCDIC جيدا.هذا عادة ما يكون ضروريا، نظرا لأن عملية بروتوكول نقل الملفات ستعمل عادة على تحويل الملف تلقائيا من ASCII إلى EBCDIC، ولكن إذا لم يكن الأمر كذلك، فيجب أن يكون الملف الذي تقوم بإنشائه صحيحا وقد يتم إرساله كثنائي بدلا من النص.

كتابة الرقم كصورة مع بدائل مناسبة لإرضاء تنسيق العشرية الموقعة من مصلحة البريد المركزية هو الإجراء الصحيح.بالطبع، جعل هذه البداسات الاستبينية هذه هي الألم، ولكن تكتبها كسلسلة كما تفعل هي الطريقة الصحيحة للحصول عليها في الملف الذي يمكن أن يقرأه المركزية.

نصائح أخرى

ثانياً ، تتطلب العديد من الحقول في الملف عشرية معبأة ، بالتنسيق S (9) 13 Comp-3.منذ أن حددت بالفعل ترميز EBCDIC ، هل يمكنني فقط كتابة الرقم العشري (على سبيل المثال1234500000001) إلى الملف باستخدام:

sw.WriteLine("1234500000001C");

... وهل يتحول بشكل صحيح في الملف الذي تم إنشاؤه؟

لا، لا يمكنك ذلك.سيكتب هذا البيان بايت EBCDIC:

F1 F2 F3 F4 F5 F0 F0 F0 F0 F0 F0 F0 F1 C3

ولكن هذا المجال COMP-3.هذه ليست أحرف مشفرة.إنه BCD مع علامة nybble (C = موجب، D = سلبي، F = غير موقعة).

12 34 50 00 00 00 1C

بافتراض أن صفحة الرموز 37 صحيحة، فأنت استطاع اكتب هذا إلى الملف باستخدام السلسلة "\u0012\u0094&\u0000\u0000\u001C", ، ولكن سيكون من المنطقي كتابة هذه الحقول غير النصية في الوضع الثنائي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top