■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

連番展開スクリプト(ruby版)

昔書いた連番展開スクリプトをrubyで書いてみました。
何でかっていうと、PC買い換えてからperlを入れてないから~
会社のPCも最近入れ替えて以来rubyしか入れてないし
って思ったら会社のLinuxにはruby入ってなかったw
なんかperlん時よりスッキリした(単にperl分かってないだけ…)
#!/usr/bin/env ruby
###############################################
# expand serial number                        #
# syntax  : foo[nStart-nEnd][...]             #
# example : before                            #
#             0: foo[0-1][3-2]bar[1+\2][\1-1] #
#           after                             #
#             0: foo03bar4-1                  #
#             1: foo02bar3-1                  #
#             2: foo13bar40                   #
#             3: foo12bar30                   #
###############################################

####### SUB FUNCTIONS
### DIGIT ALIGNMENT
def aligndigit(sFoo, nLen)
    return sFoo = "0" * [nLen - sFoo.length, 0].max + sFoo
end
### DECREMENT INDEX OF BACK-REFERENCE
def decrefindex(sFoo)
  if (sFoo =~ /(.*?\[.*?\\)(\d)(.*?\].*)/)
    return $1 + ($2.to_i-1).to_s + decrefindex($3)
  end
  return sFoo
end
### SUBSTITUTE BACK-REFERENCE "\1"
def substbackref(sFoo, sBar)
  if (sFoo =~ /.*\[(.*?)\\1(.*?)\]/)
    sEvl = aligndigit(eval($1 + sBar.to_i.to_s + $2).to_s, sBar.length)
    sFoo.gsub! /\[#{Regexp.escape($1)}\\1#{Regexp.escape($2)}\]/, sEvl
  end
  return decrefindex(sFoo)
end
### SERIAL NUMBER EXPANTION
def expand(sFoo)
  if (sFoo =~ /(.*?)\[\s*(\d+)\s*-\s*(\d+)\s*\](.*)/)
    sPre   = $1
    nStart = $2.to_i
    nEnd   = $3.to_i
    sSuf   = $4
    nLen   = $2.length # for align digit
    # increment/decrement
    nStep = nStart < nEnd ? 1 : -1
    nStart.step(nEnd, nStep) { |i|
      sAligned = aligndigit(i.to_s, nLen)
      expand(substbackref(sPre + sAligned + sSuf, sAligned))
    }
  else
    puts sFoo
  end
end

####### MAIN
while (line = ARGF.gets)
  expand(line)
end

# vim: expandtab ts=2 sw=2


やっぱステップあったんだね~修正

テーマ:Ruby - ジャンル:コンピュータ

  1. 2008/10/01(水) 00:40:04|
  2. フリーソフト
  3. | トラックバック:0
  4. | コメント:0
<<連番展開スクリプト(ruby版)修正 | ホーム | bbWheelHook0.1.6>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://nocd5.blog59.fc2.com/tb.php/288-2fc55bd8
この記事にトラックバックする(FC2ブログユーザー)
home

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

カテゴリー

カレンダー

07 | 2017/08 | 09
Sun Mon Tue Wed Thu Fri Sat
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

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