포켓몬 종족 값을 초속으로 확인할 수 있는 CLI 도구 만들기
포켓몬의 종족값 따위는 다 기억할 수 없어!
Pokemongal이 아니었다면 약 600종의 포켓몬스터의 종족치를 억지로 외우는 것은 상당히 어려웠을 것이다.
적어도 주류 포켓몬의 민첩함을 보여줘야 한다고 생각해도 포켓몬 대결에서 한 수 실수는 치명적이다.잘못 기억하면?그것도 실패의 원인이죠.
물론 기존 앱도 있지만 대전 시간이 엄격하고 속도도 중요해졌다.
그래서 나는 파시스트 파시스트처럼 포켓몬스터의 이름을 입력하고 종족치를 빠르게 확인할 수 있는 도구를 만들어 보았다(실제로 예전에 했던 것을 잊어버리고 기사를 쓰는 연습에서 소재로 삼았다).
sqlite3로 종족값표 만들기
문자로 종족치표를 만들고, 페코로 종족치표를 축소하는 방법도 쉽게 만들 수 있지만, 가까스로'HCD 합계가 가장 높은 포켓몬은?'이런 질문도 바로 대답할 수 있는 것처럼 미리 데이터베이스를 만들면 나중에 다른 도구를 만드는 꿈도 커진다.
책상은 이런 느낌으로 만들어 보았다.포켓몬 이름의 로마자 검색을 위해 primarykey에 로마자 이름을 입력하면 종족값 합계의 사용 빈도도 높아 SQL을 쓰기가 번거롭기 때문에 미리 계산해 넣는 것이 편리하다.너는 h와 a의 뜻을 알지?
create table status_list(
jpromaji VARCHAR(255) primary key,
jpname VARCHAR(255) not null,
no integer not null,
h integer not null,
a integer not null,
b integer not null,
c integer not null,
d integer not null,
s integer not null,
sum integer not null
);
데이터 원본은 전통적인 지원(yakkun.com)을 사용한다.https://yakkun.com/swsh/stats_list.htm를 봉인하여 SQL
pokemon.rb
으로 변환해 보십시오.노코지리로 커튼을 만들어 봤어요.또 로마자를 사용하기 때문에 로마지도 편리하다.
이렇게
curl https://yakkun.com/swsh/stats_list.htm | ruby pokemon.rb | sqlite3 pokemon
언제든 다시 할 수 있으면 나중에 편할 거예요.(아푸다의 포켓몬이 늘어나기 때문이다...)#! /usr/bin/env ruby
# curl https://yakkun.com/swsh/stats_list.htm | ruby pokemon.rb | sqlite3 pokemon
require 'nokogiri'
require 'romaji'
Encoding.default_external='euc-jp'
html = $stdin.read
doc = Nokogiri::HTML(html)
doc.css('.stupidtable > tbody > tr > td').each_slice(9) do |line|
no, jpname, h, a, b, c, d, s, sum = line.map { |td| td.children.first.text }
jpromaji = Romaji.kana2romaji(jpname)
values = [
no.to_i,
"\"#{jpname}\"",
"\"#{jpromaji}\"",
h.to_i,
a.to_i,
b.to_i,
c.to_i,
d.to_i,
s.to_i,
sum.to_i,
]
puts "insert into status_list (no, jpname, jpromaji, h, a, b, c, d, s, sum) values (#{values.join(',')}) on conflict(jpromaji) do nothing;"
end
CLI 툴을 함께 만들어 봅시다.
데이터베이스만으로도 충분히 편리하니 원래 목적의 CLI 도구를 만들어 보세요.
각 키보드가 작동하기를 원합니다
io/console
.또한 sqlite3 명령
open3
을 내려야 하기 때문에 사용해야 합니다.sqlite3에만 LINE 검색을 수행합니다.ANSI 도피 시퀀스.
그나저나 ANSI 회피 서열여기 기사.은 이해하기 쉬우니 감사합니다.
스크립트는 매우 신경을 쓰는 것 같지만, 표시 방식을 바꿀 수 있는 옵션만 보존되어 있습니다.
#! /usr/bin/env ruby
require 'io/console'
require 'open3'
sqlite_argument = ARGV[0] || '-list'
class Cursor
def move_top
print "\e[0H"
end
def line_on(i)
print "\e[#{i}G"
end
def clear_line
line_on(0)
print "\e[2K"
end
def clear_after
print "\e[0J"
end
def clear_all
print "\e[2J"
end
end
cursor = Cursor.new
columns = "jpname,jpromaji,h,a,b,c,d,s"
query_template = "select #{columns} from status_list where jpromaji LIKE \"%%%s%%\" limit 10"
cursor.clear_all
buff = []
$stdin.raw do |stdin|
while true
cursor.move_top
cursor.clear_line
print "> #{buff.join}"
case c = stdin.getc
when "\r", "\n"
buff.clear
cursor.clear_after
next
when "\u007F"
# backspace
buff.pop
when "\u0003", "\u0004"
# CTRL+C or CTRL+D
exit 0
else
buff << c
end
puts
query = sprintf(query_template, buff.join)
## debug
# cursor.clear_line
# puts query
cursor.clear_line
puts columns
out, _status = Open3.capture2e("sqlite3 #{sqlite_argument} pokemon", stdin_data: query)
out.each_line do |line|
cursor.clear_line
puts line
end
cursor.clear_after
end
end
구실
괜찮은 gif 애니메이션을 붙일 수 있었으면 좋겠는데 ttygif에서 좋은 조작 인상을 주지 못했어요...
Reference
이 문제에 관하여(포켓몬 종족 값을 초속으로 확인할 수 있는 CLI 도구 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ksss/articles/00febf9db3ef0b93a6dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)