تسلسل سلاسل غير معروفة الطول في COBOL
سؤال
كيف أقوم بربط سلسلتين بطول غير معروف في 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.
- عكس الاسم الأول
- انقل الوظيفة العكسية (الاسم الأول) إلى مجال العمل.
- يحتوي حقل العمل الآن على مسافات بادئة، بدلاً من المسافات الزائدة.
- ابحث عن عدد المسافات الزائدة في FIRST-NAME
- فحص مساحة العمل التي تحسب المساحات الخلفية للمساحات الرائدة.
- تحتوي المسافة الزائدة الآن على عدد المسافات الزائدة في الاسم الأول.
- ابحث عن طول حقل الاسم الأول
- حساب طول الحقل = طول الوظيفة (الاسم الأول).
- قم بربط السلسلتين معًا.
- سلسلة الاسم الأول (1: طول الحقل - المسافات الزائدة) " " الاسم الأخير محدد حسب الحجم، في الاسم الكامل.
يمكنك محاولة عمل حلقة للحصول على الطول الحقيقي.