小学生の未習漢字をぬきだそう

　スモウルビーで、小学生低学年向けにソフトを変更する必要があり、小学生で習わない漢字を抜き出さないといけなくなりました。その時に作ったコードがこれ。

漢字の情報は、
https://ja.wikibooks.org/wiki/メインページ
から引用させていただきました。

スモウルビーのことはこちら！
http://smalruby.jp/


```rb
# 小学生が学習する漢字以外を残します
#
# 漢字の情報は、
# https://ja.wikibooks.org/wiki/メインページ
# から引用させていただきました。
#
# 使い方：ruby kanji_check.rb [チェックしたいテキストファイル名]

# 指定されたテキストファイル名
source_file = ARGV[0]

# 学年(3なら、3年生が学習する漢字までを対象
GAKUNEN = 3

number = '0' .. '9'
alpha_upper = 'A' .. 'Z'
alpha_lower = 'a' .. 'z'
hiragana = 'ぁ' .. 'ん'
katakana = 'ァ' .. 'ン'

kanji = Array.new
kanji[1] = [
    '一','右','雨','円','王','音','下','火','花','貝',
    '学','気','九','休','玉','金','空','月','犬','見',
    '五','口','校','左','三','山','子','四','糸','字',
    '耳','七','車','手','十','出','女','小','上','森',
    '人','水','正','生','青','夕','石','赤','千','川',
    '先','早','草','足','村','大','男','竹','中','虫',
    '町','天','田','土','二','日','入','年','白','八',
    '百','文','木','本','名','目','立','力','林','六'
]

kanji[2] = [
    '引','羽','雲','園','遠','何','科','夏','家','歌',
    '画','回','会','海','絵','外','角','楽','活','間',
    '丸','岩','顔','汽','記','帰','弓','牛','魚','京',
    '強','教','近','兄','形','計','元','言','原','戸',
    '古','午','後','語','工','公','広','交','光','考',
    '行','高','黄','合','谷','国','黒','今','才','細',
    '作','算','止','市','矢','姉','思','紙','寺','自',
    '時','室','社','弱','首','秋','週','春','書','少',
    '場','色','食','心','新','親','図','数','西','声',
    '星','晴','切','雪','船','線','前','組','走','多',
    '太','体','台','地','池','知','茶','昼','長','鳥',
    '朝','直','通','弟','店','点','電','刀','冬','当',
    '東','答','頭','同','道','読','内','南','肉','馬',
    '売','買','麦','半','番','父','風','分','聞','米',
    '歩','母','方','北','毎','妹','万','明','鳴','毛',
    '門','夜','野','友','用','曜','来','里','理','話'
]

kanji[3] = [
    '悪','安','暗','医','委','意','育','員','院','飲',
    '運','泳','駅','央','横','屋','温','化','荷','開',
    '界','階','寒','感','漢','館','岸','起','期','客',
    '究','急','級','宮','球','去','橋','業','曲','局',
    '銀','区','苦','具','君','係','軽','血','決','研',
    '県','庫','湖','向','幸','港','号','根','祭','皿',
    '仕','死','使','始','指','歯','詩','次','事','持',
    '式','実','写','者','主','守','取','酒','受','州',
    '拾','終','習','集','住','重','宿','所','暑','助',
    '昭','消','商','章','勝','乗','植','申','身','神',
    '真','深','進','世','整','昔','全','相','送','想',
    '息','速','族','他','打','対','待','代','第','題',
    '炭','短','談','着','注','柱','丁','帳','調','追',
    '定','庭','笛','鉄','転','都','度','投','豆','島',
    '湯','登','等','動','童','農','波','配','倍','箱',
    '畑','発','反','坂','板','皮','悲','美','鼻','筆',
    '氷','表','秒','病','品','負','部','服','福','物',
    '平','返','勉','放','味','命','面','問','役','薬',
    '由','油','有','遊','予','羊','洋','葉','陽','様',
    '落','流','旅','両','緑','礼','列','練','路','和'
]

kanji[4] = [
    '愛','案','以','衣','位','囲','胃','印','英','栄',
    '塩','億','加','果','貨','課','芽','改','械','害',
    '街','各','覚','完','官','管','関','観','願','希',
    '季','紀','喜','旗','器','機','議','求','泣','救',
    '給','挙','漁','共','協','鏡','競','極','訓','軍',
    '郡','径','型','景','芸','欠','結','建','健','験',
    '固','功','好','候','航','康','告','差','菜','最',
    '材','昨','札','刷','殺','察','参','産','散','残',
    '士','氏','史','司','試','児','治','辞','失','借',
    '種','周','祝','順','初','松','笑','唱','焼','象',
    '照','賞','臣','信','成','省','清','静','席','積',
    '折','節','説','浅','戦','選','然','争','倉','巣',
    '束','側','続','卒','孫','帯','隊','達','単','置',
    '仲','貯','兆','腸','低','底','停','的','典','伝',
    '徒','努','灯','堂','働','特','得','毒','熱','念',
    '敗','梅','博','飯','飛','費','必','票','標','不',
    '夫','付','府','副','粉','兵','別','辺','変','便',
    '包','法','望','牧','末','満','未','脈','民','無',
    '約','勇','要','養','浴','利','陸','良','料','量',
    '輪','類','令','冷','例','歴','連'
]

kanji[5] = [
    '圧','移','因','永','営','衛','易','益','液','演',
    '応','往','桜','恩','可','仮','価','河','過','賀',
    '快','解','格','確','額','刊','幹','慣','眼','基',
    '寄','規','技','義','逆','久','旧','居','許','境',
    '均','禁','句','群','経','潔','件','券','険','検',
    '限','現','減','故','個','護','効','厚','耕','鉱',
    '構','興','講','混','査','再','災','妻','採','際',
    '在','財','罪','雑','酸','賛','支','志','枝','師',
    '資','飼','示','似','識','質','舎','謝','授','修',
    '述','術','準','序','招','承','証','条','状','常',
    '情','織','職','制','性','政','勢','精','製','税',
    '責','績','接','設','舌','絶','銭','祖','素','総',
    '造','像','増','則','測','属','率','損','退','貸',
    '態','団','断','築','張','提','程','適','敵','統',
    '銅','導','徳','独','任','燃','能','破','犯','判',
    '版','比','肥','非','備','俵','評','貧','布','婦',
    '富','武','復','複','仏','編','弁','保','墓','報',
    '豊','防','貿','暴','務','夢','迷','綿','輸','余',
    '預','容','略','留','領'
]

kanji[6] = [
    '異','遺','域','宇','映','延','沿','我','灰','拡',
    '革','閣','割','株','干','巻','看','簡','危','机',
    '貴','揮','疑','吸','供','胸','郷','勤','筋','系',
    '敬','警','劇','激','穴','絹','権','憲','源','厳',
    '己','呼','誤','后','孝','皇','紅','降','鋼','刻',
    '穀','骨','困','砂','座','済','裁','策','冊','蚕',
    '至','私','姿','視','詞','誌','磁','射','捨','尺',
    '若','樹','収','宗','就','衆','従','縦','縮','熟',
    '純','処','署','諸','除','将','傷','障','城','蒸',
    '針','仁','垂','推','寸','盛','聖','誠','宣','専',
    '泉','洗','染','善','奏','窓','創','装','層','操',
    '蔵','臓','存','尊','宅','担','探','誕','段','暖',
    '値','宙','忠','著','庁','頂','潮','賃','痛','展',
    '討','党','糖','届','難','乳','認','納','脳','派',
    '拝','背','肺','俳','班','晩','否','批','秘','腹',
    '奮','並','陛','閉','片','補','暮','宝','訪','亡',
    '忘','棒','枚','幕','密','盟','模','訳','郵','優',
    '幼','欲','翌','乱','卵','覧','裏','律','臨','朗',
    '論'
]

han_kigou = [
    '!','"','#','$','%','&',"'",'(',')','-','=','^','~','|',
    '`','@','{','[',';','+',']','}',',','<','.','>','/','?',"\\",'_',':','*',
]

zen_kigou = [
    '■','♪','●','◎','ー','？','！','。','、','「','」','↑','↓','←','→',
    '◆','★','＋','ー','×','÷','＜','＞','≦','≧','＝','～','・'
]

han_space = ' '
zen_space = '　'

File.open( source_file, "r:utf-8:utf-8" ) { |file|
     
    buffer = file.read

    # 指定された文字を削除します     
    alpha_upper.each { |v| buffer.gsub!(v, han_space ) }
    alpha_lower.each { |v| buffer.gsub!(v, han_space ) }
    number.each      { |v| buffer.gsub!(v, han_space ) }
    han_kigou.each   { |v| buffer.gsub!(v, han_space ) }
    zen_kigou.each   { |v| buffer.gsub!(v, zen_space ) }
    hiragana.each    { |v| buffer.gsub!(v, zen_space ) }
    katakana.each    { |v| buffer.gsub!(v, zen_space ) }

    # 指定された学年までの漢字を削除します
    nen = 1
    while( nen <= GAKUNEN )
      kanji[nen].each { |v| buffer.gsub!(v, zen_space ) }
      nen += 1
    end

    puts "文章内で残った文字----------"
    puts buffer

    # 文章から残った文字をかき集めます     
    kekka = buffer
    kekka.gsub!( han_space, ',' )
    kekka.gsub!( zen_space, ',' )
    kekka.gsub!( /\r\n/, '' )
    kekka.gsub!( /\r/, '' )
    kekka.gsub!( /\n/, '' )
    kekka.squeeze!
    kekka_array = kekka.split( ',' )
    kekka_array.shift if kekka_array.first == ""

    puts "文字一覧----------"
    puts kekka_array.uniq.compact.join( ',' )
}
```