วิธีคัดลอกเฉพาะคอลัมน์ที่เลือกของไฟล์อินพุตไปยังไฟล์เอาต์พุตในการเรียงลำดับ jcl

ฉันกำลังพยายามคัดลอกข้อมูลที่ตำแหน่ง (50,10) ของไฟล์อินพุตของฉันไปยังไฟล์เอาต์พุต แต่ฉันประสบปัญหา ขนาดไฟล์อินพุตของฉันคือ 100; ข้อมูลที่ต้องการมาจากตำแหน่งที่ 50 ไปอีก 10 ไบต์

ฉันได้ใช้ตัวเลือกต่อไปนี้ แต่แต่ละตัวเลือกทำให้เกิดการหยุดชะงัก ฉันใช้ไฟล์เอาต์พุตที่มีความยาว 10 เท่านั้นเนื่องจากฉันต้องการเพียง 10 ไบต์ แต่โค้งงอพูดว่า OUTREC RECORD LENGTH = 10

SORTIN   : RECFM=VB   ; LRECL=   100; BLKSIZE=  1000 
SORTIN   : DSNAME=MNV.TESTS.DF.CPR810S1.EZ2OP        
OUTREC RECORD LENGTH =     10                         
SORTOUT  RECFM INCOMPATIBLE                          
SORTOUT  : RECFM=FB   ; LRECL=      ; BLKSIZE=    

ฉันใช้ตัวเลือกด้านล่าง:

OUTREC FIELDS(50,10)              
SORT FIELDS(1,4,CH,A)    
--------didn't work------------

SORT FIELDS=COPY            
OUTREC FIELDS=(115,9,125,10) 
--------didn't work------------

SORT  FIELDS=COPY                        
BUILD=(50,10)                  
--------didn't work------------

INREC FIELDS=(50,10)        
SORT FIELDS=(1,3,CH,A) 
--------didn't work------------

person Agent Mahone    schedule 30.08.2014    source แหล่งที่มา


คำตอบ (1)


ฉันรู้ว่ามันไม่มีประโยชน์ที่จะบอกว่าคุณไม่ค่อยยอมรับหรือให้ข้อเสนอแนะ และไม่ได้เป็นผู้มีสิทธิเลือกตั้งมากนัก

ด้วยเหตุผลบางประการ คุณจึงตัดข้อความเหล่านั้นออกไป แต่ข้อความทั้งหมดที่คุณโพสต์จะมีคำนำหน้า WER และหมายเลขข้อความ หากคุณศึกษาคู่มือ SyncSORT คุณจะพบข้อความทั้งหมดที่ได้รับการบันทึกไว้

ลืมสิ่งนั้นไปชั่วขณะหนึ่ง คุณได้โพสต์ SORTOUT RECFM INCOMPATIBLE จะไปเกี่ยวกับความยาวบันทึกทำไม? RECFM. RECFM. คุณได้รวมข้อความที่แสดง RECFM ของ SORTIN และข้อความที่แสดง RECFM ของ SORTOUT ด้วย คือ VB และ FB ตามลำดับ หากคุณดูข้อความในคู่มือ คุณจะพบว่าคุณไม่ได้ทำอะไรที่ชัดเจนเพื่อทำให้ข้อความเหล่านั้นแตกต่างออกไป

คุณมีสองทางเลือก VTOF หรือแปลง คุณสามารถใช้มันกับ OUTREC (ฉันเชื่อ) และ OUTFIL (แน่นอน)

 OPTION COPY
 OUTFIL VTOF,
        BUILD=(50,10)

ฉันไม่รู้ทำไมคุณถึงอยากลองเรียงลำดับไฟล์และคุณควรระวังด้วยว่าการสร้างไวยากรณ์ไม่ได้ผล

สำหรับ SORT ตามค่าเริ่มต้น ไฟล์เอาต์พุตจะเป็น RECFM เดียวกันกับอินพุต บันทึกที่มีความยาวผันแปรได้จะต้องมี RDW, 1,4 เสมอ และข้อมูลจะเริ่มต้นที่ตำแหน่ง 5

หากคุณต้องการไฟล์เอาท์พุตของ RECFM อื่น คุณจะต้องระบุอย่างชัดเจน (ด้วย CONVERT, FTOV หรือ VTOF)

เมื่อสร้างระเบียน F ไม่ใช่ RDW ดังนั้น BUILD=(50,10) ของคุณจึงเป็นรูปแบบที่ถูกต้อง (หากคุณอยู่ห่างออกไปสี่ไบต์ โปรดจำไว้ว่าสำหรับระเบียน V ข้อมูลจะเริ่มต้นที่ตำแหน่งที่ห้า ดังนั้นคุณต้องเพิ่มสี่ไบต์ใน ตำแหน่งเริ่มต้นทั้งหมดที่ไม่คำนึงถึง RDW (เช่นเค้าโครงบันทึกภาษาโคบอล)

เมื่อสร้าง V จาก F โดยไม่มี RDW FTOV/CONVERT จะสร้างมันขึ้นมา

ด้วยอินพุต V และเอาต์พุต V ให้ระบุ (1,4 ที่จุดเริ่มต้นของคำสั่ง BUILD ของคุณเสมอ

person Bill Woodger    schedule 30.08.2014
comment
ขออภัยที่หายไปนานครับท่านอาจารย์ ฉันเข้าอินเตอร์เน็ตแค่ไม่กี่ครั้ง จะมาเยี่ยมชมและมีส่วนร่วมบ่อยขึ้นอย่างแน่นอน ฉันได้ลองใช้ FTOV แล้ว แต่ได้รับ OUTREC RDW NOT INCLUDED ซึ่งเป็นเพราะประเภทไฟล์ที่แตกต่างกัน ฉันสร้างทั้งไฟล์แบบคงที่และทำงานได้ดีกับ OPTION COPY OUTREC BUILD=(50,9) แบบธรรมดามาก แต่ฉันยังไม่เข้าใจว่าเหตุใดเราจึงประสบปัญหาในการดึงคอลัมน์ไฟล์ VB ในไฟล์คงที่ นี่เป็นเรื่องอุกอาจ - person Agent Mahone; 31.08.2014
comment
@AgentMahone ความผิดพลาดของฉัน: FTOV ได้รับการแก้ไขเป็นตัวแปร VTOF เป็นตัวแปรแบบคงที่ กำลังอัปเดต - person Bill Woodger; 31.08.2014