[#37660] cron から呼ぶ ruby スクリプト中で require "postgres" できません — FUJII Hideo <hid@...>
こんばんは。藤井と申します。
7 messages
2003/05/08
[#37673] [ANN] Exerb/Exerb-CC 2.6.5 — Yuya Kato <yuya-ml@4th.to>
今日が誕生日のYuyaです。
1 message
2003/05/11
[#37678] [TMail] Fromのパースについて — Ken-ichi HASHIMOTO <ken@...>
橋本です。
9 messages
2003/05/15
[#37694] TMail : RFC2231エンコードについて — murakami tamiyasu <murakami-tamiyasu@...>
村上と申します。
8 messages
2003/05/19
[#37706] setuidと$SAFE — sakazuki <QZS01353@...>
こんにちは。sakazukiです。
8 messages
2003/05/20
[#37737] missing/erf.c — NISHIMATSU Takeshi <t-nissie@...>
西松と申します.
11 messages
2003/05/30
[#37738] Re: missing/erf.c
— matz@... (Yukihiro Matsumoto)
2003/05/30
まつもと ゆきひろです
[#37739] Re: missing/erf.c
— NISHIMATSU Takeshi <t-nissie@...>
2003/05/31
西松です.
[#37740] Re: missing/erf.c
— matz@... (Yukihiro Matsumoto)
2003/05/31
まつもと ゆきひろです
[#37741] Re: missing/erf.c
— NISHIMATSU Takeshi <t-nissie@...>
2003/06/01
西松です.
[ruby-list:37652] Re: マッチした部分を配列にしまう方法
From:
Sako <sakoh@...2.so-net.ne.jp>
Date:
2003-05-07 07:49:06 UTC
List:
ruby-list #37652
酒匂と申します。
多分開発ツールとして ruby を活用なさろうと
しているのですよね。機械的な作業は、文字通り
機械に任せて人間はラクをすべきですね。
さて直接のお答えではないのですが、
ファイルの中からあるパターンにマッチする部分を
集めて配列として得る
という問題に注目すれば
def items (file_name, regexp)
r = []
File.open(file_name) { |f|
f.each { |line|
if match_data = regexp.match(line) then
r << match_data[1]
end
}
}
r
end
といった手続きを定義しておけば、
先々使いまわしがきいて便利でしょう。
r = items(ARGV[0], /(efct\w+)/)
p r
といった感じで使えます。
お尋ねのメールに当てはめれば
file_line_shaped = items(3の文書ファイル名, /(efct\w+)/)
として file_line_shaped を得ることができます。
もちろん、これが最善というわけではありません。
OOらしくクラス化したり、ファイル処理の部分は
やはり分離したり、といろいろ工夫の余地があります。
それでも、こうした部品を少しずつ書き溜めて
おくと段々便利になって行きますよ。
では。
At 15:34 03/05/07 +0900, Hirano Satoshi wrote:
>こんにちは。
>Rubyを使い始めて日の浅いひらのです。
>
>現在、以下のような問題に突き当たっております。
>
>0:
>あるディレクトリに、"efct******(*は英数字)"という法則性を持ったファイルが収 まっています。
>
>1:
>ls のリダイレクトで、上記ファイルのリストテキストファイルを作成します。
>
><リストの中身例>
>efct000000
>efct000001
>efct000002
>efct000003
>...
>
>2:
>作成したリストを、各行を要素として配列に読み込みます。
>
>3:
>とある文書ファイルがあり、その文書のテキスト中に1でリストアップしたのと同じ ファイル名が記述されています。
>
><ファイルの中身例>
>/* < efct000000 > */
>exec {
> ......
>}
>/* < efct000003 > */
>exec {
>.....
>
>4:
>3のファイルの各行を要素として配列に読み込み、efct****** の部分だけを抜き出し て配列にしまい、かつ2で作成した配列との集合の差を取り出したいと思っていま す。その時、
>
>done_efct_lines = 2で作成したファイル.readlines
>file_lines = 3の文書ファイル.readlines
>file_lines_shaped = []
>diff_lines = []
>
># その1
>file_lines.each { |line|
> if /efct\w\w\w\w\w\w/i =~ line
> line.gsub! (/ /,"")
> line.gsub! (/</,"")
> line.gsub! (/>/,"")
> line.gsub! (/\//,"")
> line.gsub! (/\*/,"")
> file_lines_shaped << line
> end
>}
>
># その2
>file_lines.each { |line|
> if /vc\w\w\w\w\w\w/i =~ line
> tmp = $& + "\n"
> file_lines_shaped << tmp
> end
>}
>
># その3
>file_lines.each { |line|
> line.scan(/vc\w\w\w\w\w\w/i) { |matched|
> matched << "\n"
> file_lines_shaped << matched
> }
>}
>
>diff_lines = file_lines_shaped - done_efct_lines
>
>としてやると、その2とその3ではdiff_linesの中にまんま、file_lines_shapedが収 まってしまうようなのです。
>その1の時だけ、ちゃんとfile_lines_shaped中の要素からdone_efct_linesの要素が 差し引かれたものだけ収まるのですが、その2その3ではどういった部分がまずいも のなのでしょうか…。
>なお、その2その3で改行コードを追加しないやり方もやってみましたが、やはりダ メでした(改行コードを入れないと、そのファイルを開いた時抽出した"efct******" が全部一つながりに(汗))。
>
>要領を得ない聞き方で恐縮ですが、何がしかご示唆いただければ幸いです。
>よろしくおねがいいたします。
>
>ひらの
-----------------------------------------------------------------------
<Sako Hiroshi> -- to design is human, design is our business
http://www02.so-net.ne.jp/~sakoh/ mailto:sakoh@ba2.so-net.ne.jp
Designers' Den Corporation : and for now, No Peace, No Future.
-----------------------------------------------------------------------