2010-11-04 23 views
5

Linux altında geliştirilen ve artık ana bilgisayara taşınması gereken bazı Perl kodları (performans analizi için) var. Görünüşe göre REXX bu platformda tercih edilen betik dilidir, ancak bu Perl betiği büyük ölçüde ilişkilendirici dizilere dayanır (temel olarak dizinin bir dizge olduğu diziler).REXX'te ilişkilendirici diziler yapmanın bir yolu var mı?

REXX'te bir yol var mı? Ben böyle bir şey yukarı kodlayacağınıza Nasıl:

/* REXX */ 
NAME = PAX 
ARRAY.NAME = "DIABLO" 
NAME = BOB 
ARRAY.NAME = "DYLAN" 
NAME = 'PAX' 
SAY "ARRAY.PAX " IS ARRAY.NAME 
NAME = 'BOB' 
SAY "ARRAY.BOB " IS ARRAY.NAME 
NAME = 'SANDY' 
SAY "ARRAY.SANDY " IS ARRAY.NAME 
IF ARRAY.NAME = "ARRAY.SANDY" THEN SAY "ARRAY.SANDY IS EMPTY" 

Rexx yukarıda basacaktır çok benzer tam olarak diziler gibi Sen kök değişkenleri kullanabilirsiniz

$arr{"Pax"} = "Diablo"; 
$arr{"Bob"} = "Dylan"; 
print $arr{"Pax"} . "\n"; 
if (defined $arr{"no"}) { 
     print "Yes\n"; 
} else { 
     print "No\n"; 
} 
+1

+1. OS/2 günümden beri REXX hakkında düşünmüyoruz. – ggutenberg

cevap

12

ancak

ARRAY.PAX IS DIABLO 
ARRAY.BOB IS DYLAN 
ARRAY.SANDY IS ARRAY.SANDY 
ARRAY.SANDY IS EMPTY 

Onlar da can abc gibi bileşik olabilir Eğer boş ise kendiliğinden geri dönecektir. Bildiğim dizin olarak ardışık sayılar kullanmayan bir sapın yinelenmesinin bir yolu yoktur.

IBM Manual with reference to Stem variables

Perl Sadece Deuian tarafından verilen cevaba biraz daha eklemek istiyorum zOS IBM Ported Tools for z/OS

10

için ekstra ücretsiz özellik olarak kullanılabilir. Katılıyorum, REXX sap değişkenleri cevabı.

Basit REXX değişkenleri varsayılan olarak kendi adlarına göre. Örneğin: X başka bir değer atanana kadar

/* REXX */ 
SAY X 

"X" yazdırır:

/* REXX */ 
X = 'A' 
SAY X 

"A" yazdırır.

Şimdiye kadar büyük bir sürpriz yok. Kök değişkenler biraz farklıdır. Kökün başı asla değerlendirilmez, sadece başlangıç ​​noktası 'dan sonraki bittir.

göstermek için:

/* REXX */               
X. = 'empty' /* all unassigned stem values take on this value */ 
A. = 'nil' 
B = 'A'  /* simple variable B is assigned value A */              
X = 'A'  /* simple variable X is assigned value A */              
SAY X.A  /* prints: empty */         
X.A = 'hello' /* Stem X. associates value of A with 'hello' */ 
SAY X.A  /* prints: hello */         
SAY X.B  /* prints: hello */         
SAY X.X  /* prints: hello */         

Bildirim X ve A kök isimleri değerlendirilmez, ancak, onlardan sonra görünen X ve A değişkenlerdir. Bazı insanlar bunu bir biraz kafa karıştırıcı buluyor - bunu bir süre düşünün ve büyük bir anlam ifade ediyor.

REXX'in Z/OS sürümü, üzerinde bir kök değişkeni üzerinde yinelemenin doğal bir yolunu sağlamaz. Bunu yapmanın en kolay yolu, kendi endeksinizi oluşturmaktır. Örneğin : ama

/* REXX */ 
X. = '' 
DO I = 1 TO 10 
    J = RANDOM(100, 500) /* Random # 100..500 */ 
    X.INDEX = X.INDEX J /* concatinate J's with 1 space between */ 
    X.J = 'was picked' /* Associate 'was picked' with whatever J evalauates to */ 
    END 

DO I = 1 TO WORDS(X.INDEX) /* Number of blank delimited 'words' */ 
    J = WORD(X.INDEX, I)  /* Extract 1 'word' at a time */ 
    SAY J X.J    /* Print 'word' and its associated value */ 
    END 

Oldukça önemsiz fikir göstermektedir. Sadece indeksleme isimlerini tutmak için INDEX (veya seçtiğin adın ne olursa olsun) ilişkilendirici bir değer olarak çıkmadığından emin ol! Bu bir olasılıksa, endeksi tutmak için başka bir değişken kullanın.

Son nokta. Her bir örneğimin, /* REXX */ ile başladığını fark ederseniz, 'u bulabilirsiniz, bunun Z/OS altında REXX programlarınızın ilk satırı olması gerekir. REXX sorusu için

+1

Yukarıdakilere ek olarak, bir değişkenin Symbol() işleviyle ayarlanıp ayarlanmadığını da öğrenebilirsiniz: X = 1; Sembol Deyin ('X')/* -> 'VAR' * /; Sembol Deyin ('Y')/* -> 'LIT' ('literal' için) */ –

+0

Tüm örneklerin tamamen büyük harf olduğunu fark ettim. Rexx durumun farkında. Unutmanız gereken bit, başlatılmamış değişkenlerin UPPERCASE adlarını değer olarak kullanmalarıdır. Böylece x.a = 1 aslında x.A to1 değerini ayarlar. Bununla birlikte, eğer c = 'a' ise x.c x.A.'dan tamamen ayrı bir sap yaprağı x.a'yı ayarlar. –

+0

@Wes Bileşik simgelerin değerlendirilmesi aşağıdaki gibi çalışır: 1) Kök adı büyük harfe katlanır ama değerlendirilmez. 2) Kuyruk elemanları (noktalarla ayrılmış) büyük harflere katlanır ve ardından bireysel semboller olarak değerlendirilir. 3) Katlanmış gövde adı artı değerlendirilen kuyruk sembolleri "yeni" bir sembol oluşturur. 4) "yeni" sembolü olduğu gibi (katlanmamış) değerlendirin. Bu değerlendirme, bileşik sembol değerini verir. Örneğiniz, c = 'a' ve a sembolü atanmamış olduğunda, bileşik simgelerin: xc, xC, Xc ve XC'nin hepsinin aynı şeyi değerlendirdiği gibi devam ederek, aynı şekilde xa, xA, Xa ve XA da değerini değerlendirir. aynı, ama farklı bir şey. – NealB

İlgili konular