Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
| Cevap: veriables problemi
Şimdi bunu yapmanın mantığı şudur;
İlk öncelikle kullanmamız gereken; $var identifier'ı. $var(*,0) identifier'ı ile, tüm veriable'leri while yardımı ile okutursun.
Bunun için; $var(*,%while-loop'u) şeklinde yaparsın.
Sonra; $($var*,%while*loop'u),2) kayıtlı olan veriable'nin değerini verir.
Ama bu değer sayı değil, harf'de olabilir.
Yani ne bilim; %x değeri pestpest diye bir kelimeye'de atanmış olabilir.
Bunun için $regex kullanarak değer kısmında harf olup olmadığını kontrol edersin; !$regex($($var(*,%1),2),/[a-z]/g) (Burada eğer, değer kısmında harf geçmiyorsa diyoruz)
Ve ek olarak; değer kısmında sadece rakam geçenleri baza alalım diyoruz; $regex($($var(*,%1),2),/[1-9]/g) (Değer kısmında rakam bulunuyorsa diyoruz)
Buraya kadar herşey tamam.
Ama bu alias'ı yaparken while kullandığımız için, while'a atadığımız değer ve eşitlenmesi gereken değer sayı olduğu için, komut sonunda gözükecektir.
Bunun için while ile döngü yaptığımız değer'leri ayırıyoruz; !$istok(%1 %2,$var(*,%1),32) (Eğer %1 %2 değerleri veriablele'lar içinde yoksa diyoruz)
Sonra bunların hepsini $addtok identifier'ı ile yan yana diziyoruz; var %= = $addtok(%=,$+($var(*,%1),½,$($var(*,%1),2)),32)
While sonunda; $sorttok identifier'ı ile değer'leri en yüksekten en alçağa doğru okutuyoruz.
Bunun içinde $sorttok identifier'ında "nr" parametresini kullanıyoruz. Yani kısacası kod şöyle oluyor;
alias listele { var %1 = 1,%2 = $var(*,0) | while %1 <= %2 { if $regex($($var(*,%1),2),/[1-9]/g) && !$regex($($var(*,%1),2),/[a-z]/g) { if !$istok(%1 %2,$var(*,%1),32) { var %= = $addtok(%=,$+($var(*,%1),½,$($var(*,%1),2)),32) } } | inc %1 } | echo -a $replace($sorttok(%=,189,nr),$chr(189),$chr(32)) } /listele yapman yeterli olacaktır.
Umarım anlamışsındır, açıklayıcı bir şekilde anlattım. |