対象ファイルを検索して、不足しているキーを表示する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!ruby -Ku | |
require 'csv' | |
require 'kconv' | |
class String #Stringクラスにメソッド追加(表示色) | |
def c(ccode) | |
"\e[#{ccode}m#{self}\e[0m" | |
end | |
def red; c(31); end | |
def cyan; c(36); end | |
end | |
def search(seekArray, key) | |
seekArray.each {|line| | |
if /#{key}/ =~ line #キーにマッチする行を返す、なければnilを返す | |
return line | |
end | |
} | |
return nil | |
end | |
def seek2(keyCSV, seekFile) | |
keyArray = [] | |
seekArray = [] | |
CSV.open(keyCSV, 'r:sjis') {|csv| keyArray = csv.readlines} | |
File.open(seekFile,'r:sjis') {|txt| seekArray = txt.readlines} | |
keyArray.each {|keyLine| | |
msg = msg2 = '' | |
if search(seekArray, '"' + keyLine[0] + '"') == nil | |
msg = keyLine[0] + ' [' + keyLine[2].toutf8 + ']' | |
if keyLine[1] == 'i' #必須キー(important)が見つからない=>赤字で表示 | |
print msg.red | |
else | |
print msg | |
end | |
if keyLine[3] == nil | |
msg2 = ' ' | |
else #見つからなかったキーに、関連キーが設定されていればそれを検索 | |
foundText = search(seekArray, '"' + keyLine[3] + '"') | |
parseText = foundText == nil ? [''] : foundText.parse_csv | |
{'KI' => 4, 'OP' => 10, 'S' => 2, '' => 0}.each {|k, i| #区分に応じて取得列を決定 | |
if /^#{k}/ =~ parseText[0] | |
msg2 = ' : ' + parseText[i].toutf8 #関連キーの情報を併せて表示 | |
break | |
end | |
} | |
end | |
puts msg2 | |
end | |
} | |
end | |
#メイン処理 | |
csvArray = ['./keyList.csv'] #キーを列挙したCSVファイル、配列で複数ファイル指定可 | |
seekFile = './seekFile.txt' #検索対象ファイル | |
puts 'Non-existent keys are shown below:'.cyan | |
csvArray.each {|csvFile| | |
seek2(csvFile, seekFile) #対象ファイルを検索して、不足しているキーを表示する | |
} | |
#対象ファイル内で、キーが重複した行があれば表示する | |
File.open(seekFile,'r:sjis') {|txt| | |
buf = ''; isDuplicated = false | |
txt.each {|line| | |
if line.parse_csv[1] == buf | |
isDuplicated = true | |
break | |
else | |
buf = line.parse_csv[1] | |
end | |
} | |
if isDuplicated | |
puts 'Duplicated key was found. : ' + buf.red | |
end | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment