[#38020] irb で %W(#{...}) — yoshihisa masuda <sacong@...>
マスダといいます。
[#38036] undef variable — hirocy <hirocy@...>
hirocyです.
[#38039] proc method — "K.Sasada" <ko1@...>
こんにちは。ささだです。
[#38056] ファイル書換え? — 中村文建 <tx6f-nkmr@...>
初めまして、MLに参加させて頂く中村と申します。
[#38057] [ANN] Ruby-GNOME2-0.6.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38059] [ANN] rbbr-0.3.0 — Masao Mutoh <mutoh@...>
むとうです。
[#38073] module extendable? — Takeshi Horinouchi <horinout@...>
堀之内と申します。
[#38080] ポートが閉じているときの例外など — Mitsuru Ogino <ogino@...>
荻野と申します。いつも質問や要望ばかりですみません。
なかだです。
いわおかです。
荻野です。
なかだです。
いわおかです。
In message <20030812150516.GV37221@barber.fe.rn.tuat.ac.jp>
中川と申します。
In message <20030814.140757.707824131.tetsuo@sapphire.siz.nes.nec.co.jp>
なかだです。
In message <200308160517.h7G5HcPL012839@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308180959.h7I9xnb7001977@sharui.nakada.kanuma.tochigi.jp>
なかだです。
まつもと ゆきひろです
[#38090] ruby-1.8 で eruby が SEGV — Kazuhiko <kazuhiko@...>
かずひこです。
[#38104] XMLRPC::ModRubyServer — OHARA Shigeki <os@...>
大原です。
[#38122] ruby-tcpwrap and mkmf.rb — Takahiro Kambe <taca@...>
こんにちは。
At Sat, 16 Aug 2003 12:51:55 +0900,
In message <200308160518.h7G5IXPL012842@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In message <200308160714.h7G7ErPL014647@sharui.nakada.kanuma.tochigi.jp>
前田です。
In message <87d6f3znlc.wl@kirk.priv.netlab.jp>
前田です。
わたなべです。
[#38164] Ruby1.8.0でRuby-PostgreSQLがビルドできない — kensaku Maki <sakaki@...>
はじめまして、まきと申します。
[#38183] String << の動作につきまして — kuto@...
うと と申します。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
たけ(tk)です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
ふなばです。
ども、西啓一朗@Ktouth Brand. です。
[#38195] 理解の進め方(Re: String << の動作につきまして) — Tadashi Oh-Ya <toy@...>
おおやです。
たけ(tk)です。
In "[ruby-list:38206] 理解の進め方:シュールな世界"
たけ(tk)です
[#38198] Tmailで送るメールに日付がつけられなくなりました — 川田誠司 <kawada.seiji@...>
はじめまして
[#38256] かみ砕いた説明をすべき範囲 — 西 啓一朗 <receiver@...>
ども。西啓一朗@Ktouth Brand. です。
なかだです。
たけ(tk)です
なかだです。
たけ(tk)です
いわおかです。
たけ(tk)です
まつもと ゆきひろです
たけ(tk)です。
たけ(tk)です。
[ruby-list:38097] Re: ファイル書換え?
高橋征義です。
遅くなりました。すでにいろいろな方がメールされているので、
今さら書くことはあんまりなさそうですが。
中村文建 <tx6f-nkmr@asahi-net.or.jp> wrote:
> 最終的にやりたい事はWindows上でHTMLの整形をRubyで自動化したいのです。
> (1)現フォルダのファイル全てを変換(上書き変換する)
> (2)タグ:大文字→小文字変換
> (3)文字コード:SJIS→JIS変換
> (4)HTML整形・・etc
まず、(1)をやるのであれば、出力用のフォルダを作って、そちらに
変換後のファイルを生成するようにした方がいいと思います。
ただでさえ古いファイルを消してしまうと困ったことが起きやすい
ところに、プログラムのミスがあったりすると泣くに泣けない事態が
発生したりしかねない(というかよく発生する……)ためです。
この場合、リダイレクトはせずに、個々の入力用・出力用ファイル名を
作って、openすることになります。
> ▲質問:ファイルの上書きはどのようにするのでしょうか?
上記のような場合、大きな流れとしては、↓こんな感じですね。
orig_filename = 【オリジナルのファイル名】
out_filename = 【出力先のファイル名】
File.open(orig_filename){|f| # 入力用ファイルを開いて
content = f.read # 読み込んで
new_content = transform(content) # 変換する
}
File.open(out_filename){|f2| # 出力用ファイルを開いて
f2.write(new_content) # 書き出す
}
> 以下 ソースを示します================================================
>
> require 'kconv'
>
> filename = ARGV[0] # ファイル読み込み
> io = File.open(ARGV[0], "r+") # ファイル・オープン
>
> filename.tojis # 文字コード JIS [ISO-2022-JP]で出力
あー、これは、何もやってないことになります。
String#tojis というのは、与えられた文字列をJIS(ISO-2022-JP)に
変換した新しい文字列を返すものです。文字列 filename が置き換わる
ものではないですし、filenameの指すファイルの文字コードを変換する
ものでもありません。
> HTMLRegexp = /(<!--.*?--\s*>)|
> (<(?:[^"'>]*|"[^"]*"|'[^']*')+>)|
> ([^<]*)/xmu
>
> data = io.read # ファイルから読み込む
>
> data.scan(HTMLRegexp){|match|
> comment, tag, tdata = match[0..2]
> if comment # コメントにマッチした場合
> p [ "Comment", comment ]
> elsif tag # タグにマッチした場合
> tag.gsub!(/\w/){|matched| matched.downcase }
> p [ "Tag", tag ]
> elsif tdata # テキストデータにマッチした場合
> tdata.gsub!(/\s+/, " ") # 空白をまとめる
> tdata.sub!(/ $/, "") # 末尾の空白を削除する
> p [ "TextData", tdata ] unless tdata.empty? # 空でなければ出力する
> end
>
> }
この辺りは、もうすでに気づいておられるようですが、「どういう
変換が行われるのか」を確認するためのものにはなっているものの、
「実際に変換してファイルに落とす」ものにはなっていません。
というわけで、新井さんのメールも参考にして、ちょっと
書いてみました。
require 'kconv'
ORIGINAL_DIR = "foo/bar"
OUTPUT_DIR = "outdir"
HTMLRegexp = /(<!--.*?--\s*>)|
(<(?:[^"'>]*|"[^"]*"|'[^']*')+>)|
([^<]*)/xm
Dir.glob(ORIGINAL_DIR+"/*.html"){ |filename| # ファイル読み込み
File.open(filename, "r"){|f| # ファイル・オープン
outfilename = File.basename(filename)
data = f.read # ファイルから読み込む
buf = ""
data.scan(HTMLRegexp){|match|
comment, tag, tdata = match[0..2]
if comment # コメントにマッチした場合
p [ "Comment", comment ]
buf << comment
elsif tag # タグにマッチした場合
tag.gsub!(/\w/){|matched| matched.downcase }
p [ "Tag", tag ]
buf << tag
elsif tdata # テキストデータにマッチした場合
tdata.gsub!(/[ \t]+/, " ") # 空白をまとめる
tdata.gsub!(/ $/, "") # 末尾の空白を削除する
tdata.gsub!(/\n+/, "\n") # 改行をまとめる
p [ "TextData", tdata ]
buf << tdata
end
}
File.open(OUTPUT_DIR+"/"+outfilename, "w"){|f2|
f2.write(buf.tojis)
}
}
}
ご参考まで。
高橋征義 (TAKAHASHI Masayoshi) E-mail: maki@rubycolor.org
……ばばっと書いたので、どっか間違っているところもあるかも(_o_)