سؤال

كيف أقوم بربط سلسلتين بطول غير معروف في COBOL؟لذلك على سبيل المثال:

WORKING-STORAGE.
    FIRST-NAME    PIC X(15) VALUE SPACES.
    LAST-NAME     PIC X(15) VALUE SPACES.
    FULL-NAME     PIC X(31) VALUE SPACES.

لو FIRST-NAME = 'JOHN ' و LAST-NAME = 'DOE ', ، كيف يمكنني الحصول على:

FULL-NAME = 'JOHN DOE                       '

في مقابل:

FULL-NAME = 'JOHN            DOE            '
هل كانت مفيدة؟

المحلول

أعتقد أن ما يلي سيعطيك ما تريد.

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

نصائح أخرى

للوهلة الأولى، الحل هو استخدام التعديل المرجعي لربط السلسلتين معًا، بما في ذلك المسافة.المشكلة هي أنه يجب عليك معرفة عدد المسافات الزائدة الموجودة في FIRST-NAME، وإلا فسوف تنتج شيئًا مثل 'JOHNbbbbbbbbbbbbDOE'، حيث b عبارة عن مسافة.

لا توجد دالة COBOL جوهرية لتحديد عدد المسافات الزائدة في السلسلة، ولكن توجد واحدة لتحديد عدد المسافات البادئة في السلسلة.ولذلك، فإن أسرع طريقة، بقدر ما أستطيع أن أقول، هي عكس الاسم الأول، والعثور على عدد المسافات البادئة، واستخدام التعديل المرجعي لربط الاسمين الأول والأخير معًا.

سيتعين عليك إضافة هذه الحقول إلى مساحة تخزين العمل:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  1. عكس الاسم الأول
    • انقل الوظيفة العكسية (الاسم الأول) إلى مجال العمل.
    • يحتوي حقل العمل الآن على مسافات بادئة، بدلاً من المسافات الزائدة.
  2. ابحث عن عدد المسافات الزائدة في FIRST-NAME
    • فحص مساحة العمل التي تحسب المساحات الخلفية للمساحات الرائدة.
    • تحتوي المسافة الزائدة الآن على عدد المسافات الزائدة في الاسم الأول.
  3. ابحث عن طول حقل الاسم الأول
    • حساب طول الحقل = طول الوظيفة (الاسم الأول).
  4. قم بربط السلسلتين معًا.
    • سلسلة الاسم الأول (1: طول الحقل - المسافات الزائدة) " " الاسم الأخير محدد حسب الحجم، في الاسم الكامل.

يمكنك محاولة عمل حلقة للحصول على الطول الحقيقي.

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