卒論で頭がおかしくなっているらしい。普通に考えたらなんで自分で作るのか意味不明なんだけど、考えた時は書いた後だった。
Text::Hatenaとかではてな記法をhtmlに変換してから、hprictで必要な要素を貫き出してもっかいText::Hatenaで加工してやればよいだけだった。。。
内容
Dir.chdir("/Users/yasuhisa/hatena_keyword/syou6162") ["Tsukuba.R:2:イントロダクション.txt","フュ−チャーリスト宣言.txt","我らクレイジー☆エンジニア主義.txt","頭がいい人、悪い人の仕事術.txt"].each{|f| path = "/Volumes/syou6162/Documents/" + File.basename(f,".txt") + ".html" system "ruby /tmp/aaa.rb -i \"#{f}\" -o \"#{path}\"" }
みたいなことをやっていたんだけど、変換するリストを持っておくのが面倒だと思ったのでそれすらもはてなグループのキーワードのテキストを使うことにした。おいらの場合、よく見そうなキーワードを「リンク集」というキーワードファイルにまとめてある。書式はこんな感じになっている。
*集合位相 -[[集合位相入門]] *R **R勉強会 -[[R勉強会第一回]] -[[R勉強会第二回]] **Tsukuba.R#1 -[[Tsukuba.R:1:GoodPointForUsingR]] -[[Tsukuba.R:1:Rにおけるぐぐり方]] -[[Tsukuba.R:1:Rの基本データ構造、よく使う関数紹介]]
これをディレクトリ構造に見たててどうにかしようというのが今回の考え。で、お手軽パーサーみたいなのを作ろうという感じにした。ディレクトリ構造になっているので、デザインパターンでいうところのCompositeパターンでいいなということに書いてから気がついた。このエントリとはあんまり関係ないけど、デザパタはid:hyukiさんのデザパタ本が分かりやすくて超おすすめです。

- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (399件) を見る

# -*- coding: utf-8 -*- class Entry attr_accessor :name def initialize(name) @name = name end def display(indent=0) end def make end end class Text < Entry attr_accessor :base_path def display(indent=0) puts " " + @name end def make input = base_path + "/" + @name + ".txt" output = "#{Dir.pwd}/#{@name}.html" system "ruby /tmp/aaa.rb -i \"#{input}\" -o \"#{output}\"" end end class Directory < Entry attr_accessor :texts def initialize(name) @name = name @texts = [] end def push(text) @texts.push text end def display(indent=0) puts ("\s" * indent)+ @name @texts.each{|text| text.display(indent+1) } end def make current = Dir.pwd Dir.mkdir(@name) unless File.exist?(@name) Dir.chdir(@name) puts "mkdir " + Dir.pwd @texts.each{|text| text.make } Dir.chdir(current) end end def convert_file_to_dirs(file,base_path) dirs = [] prev_item = nil # 直前のアイテム。DirectoryかTextを判別する用 prev_dir = nil # 直前のディレクトリを覚えておくためのもの up_dir = nil # 上のディレクトリを覚えておくためのもの num_of_prev_dir_asterisk = nil # 直前のディレクトリを覚えておくためのもの File.open(file,"r").each{|line| if line =~ /^(\*+)([^\*]*?)$/ d = Directory.new($2) if $1.length == 1 # *Rのようなもの dirs.push d up_dir = d elsif $1.length == num_of_prev_dir_asterisk # 同レベルのものを追加 up_dir.push d else # 下位レベルのものを追加 prev_dir.push d end num_of_prev_dir_asterisk = $1.length prev_item = d prev_dir = d elsif line =~ /-\[\[(.*?)\]\]/ t = Text.new($1) t.base_path = base_path prev_dir.push t prev_item = t elsif line =~ /^\n$/ #改行飮みは飛ばす next end } return dirs end link_file = "/Users/yasuhisa/hatena_keyword/syou6162/リンク集.txt" base_path = "/Users/yasuhisa/hatena_keyword/syou6162" dirs = convert_file_to_dirs(link_file,base_path) target = "/Volumes/syou6162/Documents" dir_name = "keyword" Dir.chdir(target) Dir.mkdir(dir_name) unless File.exist?(target + "/" + dir_name) Dir.chdir(dir_name) dirs.each{|dir| dir.make }
これではてなキーワードを編集しまくるだけで、自分用のhtmlがiphoneで見れるようになるなる。