スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



偶数か奇数かで引用符を切り替える

※引用符はASCII コードで指定すれば、下のようなことをする必要はありません。
アホとハサミは使いようというか、アホにハサミを持たせてはいけませんね!
というわけでTTLメーカーサンプルを見てください。



複数の引用符が連なる行をTTLマクロで自動送信するの続き。

1重引用符と2重引用符の両方を含むこのようなコマンド行。
echo "$MJ" |grep 'we' |egrep "[MJ]"

まず、先に来ない方の引用符(この例では「'」)で区切った配列にするとこうなる。 *1
0| echo "$MJ" |grep 
1| we
2| |egrep "[MJ]"
 *1: ふつうsplit関数やメソッドは区切り文字は削除して返すので、we の左右の引用符はなくなる。

それらを、配列の区切り文字に使ったその引用符で囲むとこうなる。
0| 'echo "$MJ" |grep '
1| 'we'
2| ' |egrep "[MJ]"'
この時点で、重複しない引用符で囲っての文字列リテラルとなっている。
ただし、もとの文字列の 'we' の「'」はつけ直す必要がある。あとは、配列インデックスが奇数のときに、そのさらに外側を「'」には「"」で、「"」には「'」で囲んでやればいい! *2

先頭にteratermマクロ関数の「send」と、最後にLFの#10も加えてTTLマクロになった結果は、
send 'echo "$MJ" |grep '
send "'we'"
send ' |egrep "[MJ]"'
send #10

デモはTTLマクロメーカー
ソースのサンプル。先にあるのが「'」なら「"」を、「"」なら「'」を返すような関数を用意しておいて、
function qType(s){
var sq = s.indexOf("'");
var dq = s.indexOf('"');
if((sq == -1)&&(dq == -1)) return "'";
if(sq == -1) return "'";
if(dq == -1) return '"';
if(sq < dq) return '"';
}
配列で回す。
var q = qType(s);
var array_s = s.split(q);
var qq = (q =="'") ? '"' : "'";
for(var k=0; k < array_s ; k++){
if(!array_s[k]) continue;
if(k % 2 == 0) rep +='send '+q+ array_s[k] +q+"\r\n";
else rep +='send '+qq+q+ array_s[k] +q+qq+"\r\n";
}
rep += 'send #10;


*2: シェルでそういう使い方が必要な時があるとするならば、行の最初に見つかった引用符が後ろでネストして使われているとだめ。たとえば、「echo "$MJ" |grep 'a"$b"c'」
スポンサーサイト



comment

Secret

while(aho.atEndofStream)

笹部 政宏
笹部 政宏
mail




フリーソフツ
Category
はてブ
Monthly Archive
New Entry
New Comment
New Trackback
RSS
Copyright © Kittens flewby me All Rights Reserved.

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。