[過去ログ]
awkについて語るスレ $2 (1002レス)
awkについて語るスレ $2 http://mevius.5ch.net/test/read.cgi/tech/1172242542/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
686: デフォルトの名無しさん [sage] 2012/07/14(土) 22:27:17 >>682 BEGIN{ QMAX=3 QTopPos=0;QTailPos=0;QNum=0; deQ(); enQ("1");deQ(); enQ("a");enQ("b");enQ("c");enQ("x");deQ();deQ();deQ();deQ(); } function enQ(PushVal){ if (QNum+1 > QMAX){print "おなかいっぱい"; return;} nextPos = (QTopPos+1) % QMAX; queue[QTopPos] = PushVal; QTopPos=nextPosQNum++; } function deQ(){ if (QNum < 1){print "からっぽ"; return} QNum--; TailVal=queue[QTailPos] QTailPos = (QTailPos +1) % QMAX; print TailVal; return TailVal; } http://mevius.5ch.net/test/read.cgi/tech/1172242542/686
687: 686 [sage] 2012/07/14(土) 22:54:06 ↑の結果はこんな感じ。 >からっぽ >1 >おなかいっぱい >a >b >c >からっぽ >>685の書いているリングバッファ実装です。 enqueue,dequeue回数が多いならリングバッファで良いと思う。 大抵の場合はQMAXに大きな値を設定すれば事足りるハズだけど 上限が決定できない等の事情があればdelete arrayを使った単純な配列管理かな。 ただ添え字が数値上限を超えない様な工夫は必要だね。 http://mevius.5ch.net/test/read.cgi/tech/1172242542/687
691: 686 [sage] 2012/07/21(土) 23:12:03 >>688 BEGIN{ QMAX=9007199254740991 QTopPos=QTailPos=QNum=0; hitTop=0; A[++z]="hoge"; A[++z]="1 2 3 4 5"; A[++z]="fuga"; A[0]=z; for(i=1;i<=A[0];i++){ p=1; while(match(substr(A[i],p),/[0-9]+/)){ p+=RSTART-1; enQ(substr(A[i],p,RLENGTH)); p+=RLENGTH; } if(QNum>0){ while(QNum && hitTop<i)A[++hitTop]=deQ(); }else{ delete A[i]; } }; if(QNum>0) while(QNum)A[++A[0]]=deQ(); for(z=1;z<=A[0];z++)print "A[" z "]:" A[z]; } http://mevius.5ch.net/test/read.cgi/tech/1172242542/691
692: 686 [sage] 2012/07/21(土) 23:44:24 691の続き ちなみに、A[1]〜A[A[0]]をgrepして結果はA[1]〜A[?]に戻すスクリプトね。 複数件マッチする事があるので未処理行を上書きしないようにキュー使ってる。 function enQ(PushVal){ if (QNum+1 > QMAX){print "Queue Overflow"; exit;} nextPos = (QTopPos+1) % QMAX; QBody[QTopPos]=PushVal; QTopPos=nextPos QNum++; } function deQ(){ if (QNum<1){print "Illigal dequeue"; exit;} QNum--; TailVal=QBody[QTailPos]; delete QBody[QTailPos]; QTailPos=(QTailPos +1) % QMAX; return TailVal; } リングバッファの上限超えたら終了させてるけど>>688の実装も上限超えたらバグるし許して。 計ってないけどループがない分早い筈。コードサイズはお察し。 メモリはA[]にデータ抱えてる時点でアウトな感じだけどA[]を適宜消すようにしといた。 出力先を別にしたいならA[]にdeQ()せず別変数にすればおk。 これで良い? http://mevius.5ch.net/test/read.cgi/tech/1172242542/692
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.035s