Tabii ki bir döngü ile yapabilirsiniz. Mesele şu ki, sadece üç baytınız var. Üç bayt uzunluğunda bir şeyle, temel şeylerden başka bir şey yapmak, makul olanın ötesinde tüketilen kaynaklar kadar üstündür. Kaynakların ödenmediği ve günlük kullanılan birçok programda verimsiz kodun yayılmasının kimseyi endişelendirmediği durumlarda, bunu yapmanın başka yolları da vardır.
01 A-MEANINGFUL-NAME.
88 AMN-NO-ACTUAL-DATA VALUE SPACE.
05 AMN-FIRST-TWO-BYTES-OF-DATA.
10 AMN-FIRST-BYTE PIC X.
10 FILLER PIC X.
88 AMN-ONE-BYTE-OF-DATA VALUE SPACE.
05 FILLER PIC X.
88 AMN-TWO-BYTES-OF-DATA VALUE SPACE.
01 B-MEANINGFUL-NAME.
05 BMN-FIRST-BYTE PIC X.
05 BMN-SECOND-TWO-BYTES.
10 FILLER PIC X.
10 BMN-THIRD-BYTE PIC X.
MOVE SPACE TO B-MEANINGFUL-NAME
EVALUATE TRUE
WHEN AMN-NO-ACTUAL-DATA
CONTINUE
WHEN AMN-ONE-BYTE-OF-DATA
MOVE AMN-FIRST-BYTE TO BMN-THIRD-BYTE
WHEN AMN-TWO-BYTES-OF-DATA
MOVE AMN-FIRST-TWO-BYTES-OF-DATA
TO BMN-SECOND-TWO-BYTES
WHEN OTHER
MOVE A-MEANINGFUL-NAME TO B-MEANINGFUL-NAME
END-EVALUATE
Bunu yapmanın verimli ve açık bir yolu budur. Muhtemelen pek çok insan için çok fazla yazıyor, ama bunlar bir programın kolayca anlaşılması ve kolayca muhafaza edilmesi gereğini düşünmeyen insanlar. İhtiyaç duyulan varış noktasında sadece baytları boşlaştırarak daha verimli hale getirilebilir, ancak bunu kendiniz deneyebilirsiniz.
Yerleşik bir alanla "olduğu gibi" çalışmayacak, ancak bunu yapmak için kolayca değiştirilebilir.
Ayrıca, editörünüzün gücünü kullandığınız için, gerçekten çok fazla yazmıyor.
Ya
01 A-MEANINGFUL-NAME PIC XXX.
01 B-MEANINGFUL-NAME PIC XXX.
01 FILLER
REDEFINES B-MEANINGFUL-NAME.
05 C-MEANINGFUL-NAME PIC XXX JUST RIGHT.
UNSTRING A-MEANINGFUL-NAME
DELIMITED BY SPACE
INTO C-MEANINGFUL-NAME
O kadar çok yazım
. Daha az verimli. Hala temiz.
Katıştırılmış bir boşlukla çalışmaz, ancak kod bunu yapmak için kolayca dahil edilebilir (yalnızca koşullu olarak kullanın). belki biraz daha az net ve iyi biçimlenmiş sayısal olma kaynağına dayanır muhtemelen daha da az verimli
Ya
01 A-MEANINGFUL-NAME PIC XXX.
01 B-MEANINGFUL-NAME PIC XXX.
01 C-MEANINGFUL-NAME
REDEFINES B-MEANINGFUL-NAME PIC ZZ9.
COMPUTE C-MEANINGFUL-NAME = FUNCTION NUMVAL
(A-MEANINGFUL-NAME)
O kadar çok tipleme
,.
Gömülü bir alanla çalışmaz, çünkü iyi biçimlendirilmiş bir sayısal olmaz.
Edward H'nin cevabı gösterdiği gibi, referans değiştirme kullanılabilir.böylece, (olmalıdır)
MOVE SPACE TO B-MEANINGFUL-NAME
EVALUATE TRUE
WHEN A-MEANINGFUL-NAME = SPACES
CONTINUE
WHEN A-MEANINGFUL-NAME (2:1) = SPACES
MOVE A-MEANINGFUL-NAME (1:1)
TO B-MEANINGFUL-NAME (3:1)
WHEN A-MEANINGFUL-NAME (3:1) = SPACES
MOVE A-MEANINGFUL-NAME (1:2)
TO B-MEANINGFUL-NAME (2:)
WHEN OTHER
MOVE A-MEANINGFUL-NAME TO B-MEANINGFUL-NAME
END-EVALUATE
bunun için oluşturulan çalıştırılabilir kod olacak orijinal örnekle aynıdır: Burada yapmak için yeniden ilk örnek referans tadilatı yoluyla kaybolabilir ne berraklık bir göstergesi olarak, bu Verimli, ama umarım okumak daha zor olduğu kabul edilir. (Tabii ki, bunu kodlamak için, farklı bir şekilde biçimlendiririm, en azından okumayı biraz daha kolaylaştırırdım, ama bir "VAR1" sözcüğü bile boşluklardan daha fazla yazamayacağımı sanıyorum).
Öyle kaynak verileri için tek olasılık? Sadece "1"? Tek bir sayısal rakam mı? Ya da iki ya da üç basamak olabilir mi? –