[#7356] Q: jcode.rb tr(String + nil) — WATANABE Tetsuya <tetsu@...>

ruby-1.1b9_08 (07 からみたいですが)での話です。

15 messages 1998/04/08
[#7358] Re: Q: jcode.rb tr(String + nil) — matz@... (Yukihiro Matsumoto) 1998/04/08

まつもと ゆきひろです

[#7376] [Q] Thread — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

19 messages 1998/04/08
[#7384] Re: [Q] Thread — keiju@... (Keiju ISHITSUKA) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7385] Re: [Q] Thread — matz@... (Yukihiro Matsumoto) 1998/04/09

まつもと ゆきひろです

[#7391] Re: [Q] Thread — keiju@... (石塚圭樹 ) 1998/04/09

けいじゅ@日本ラショナルソフトウェアです.

[#7471] scope — Wakou Aoyama <wakou@...>

青山です。

22 messages 1998/04/15
[#7474] Re: scope — WATANABE Hirofumi <watanabe@...> 1998/04/15

わたなべです.

[#7475] Re: scope — Wakou Aoyama <wakou@...> 1998/04/15

青山です。

[#7500] List on List — WATANABE Hirofumi <watanabe@...>

わたなべです.

26 messages 1998/04/15
[#7501] Re: List on List — matz@... (Yukihiro Matsumoto) 1998/04/15

まつもと ゆきひろです

[#7509] クラスの変更 — Mitsuru Ogino <ogino@...>

荻野といいます。すみませんが、ご指導ください。プログラミング初心者です。

13 messages 1998/04/15

[#7591] How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...>

えーと、既に「Perlのmapをrubyでどう書くか」という話題がで出てしまった

29 messages 1998/04/16
[#7601] Re: How to write Perl's `@a[@b] = @c' in ruby — WATANABE Hirofumi <watanabe@...> 1998/04/17

わたなべです.

[#7614] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro HARA <sinara@...> 1998/04/17

原です。

[#7626] Re: How to write Perl's `@a[@b] = @c' in ruby — Inaba Hiroto <inaba@...> 1998/04/19

From: Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>

[#7628] Re: How to write Perl's `@a[@b] = @c' in ruby — Shin-ichiro Hara <sinara@...> 1998/04/19

原です。

[#7659] iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby) — shugo@... (Shugo Maeda) 1998/04/20

前田です。

[#7671] How to install beta versions — Shin-ichiro HARA <sinara@...>

原です。

32 messages 1998/04/21
[#7672] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/21

まつもと ゆきひろです

[#7674] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7675] Re: How to install beta versions — WATANABE Tetsuya <tetsu@...> 1998/04/21

>>>>> "W" == WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> writes:

[#7677] Re: How to install beta versions — Shin-ichiro HARA <sinara@...> 1998/04/21

原です。

[#7679] Re: How to install beta versions — WATANABE Hirofumi <watanabe@...> 1998/04/21

わたなべです.

[#7690] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/21

From: WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>

[#7700] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7710] Re: How to install beta versions — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1998/04/22

From: matz@netlab.co.jp (Yukihiro Matsumoto)

[#7711] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/22

まつもと ゆきひろです

[#7720] Re: How to install beta versions — chisaka@... 1998/04/23

[#7721] Re: How to install beta versions — matz@... (Yukihiro Matsumoto) 1998/04/24

まつもと ゆきひろです

[#7724] Re: How to install beta versions — NAGAI Hidetoshi <nagai@...> 1998/04/25

永井@知能.九工大です.

[#7729] mail index sort by From: — Kikutani Makoto <kikutani@...>

きくたにです。

27 messages 1998/04/26
[#7730] mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/26

ごとけんです

[#7738] Re: mail index sort by From: — Kikutani Makoto <kikutani@...> 1998/04/27

きくたにです。

[#7757] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[#7758] Re: mail index sort by From: — akira yamada / やまだあきら <akira@...> 1998/04/28

[#7760] Re: mail index sort by From: — gotoken@... (GOTO Kentaro) 1998/04/28

ごとけんです

[ruby-list:7792] こんなスクリプト作ってみました

From: Daisuke Sato <densuke@...2.so-net.ne.jp>
Date: 1998-04-30 01:35:53 UTC
List: ruby-list #7792
佐藤@東邦大です。

溜ったメールを処理するちょっとしたものを作ってみました。
が、brush upをしたいと思い、こちらに投げさせていただきます。

このスクリプトを起動すると、指定したメールフォルダで指定した日数以上を経過
したメールをアーカイブし、削除します。
(ここでのメールは、mh形式を意識しています)

アーカイブファイルは
	     「Folder名-処理を開始した時間(秒まで).tar.gz」
となります。
また、各アーカイブには、00indexというファイルが含まれ、その中には、アーカ
イブに含まれた各メールの番号、From、Subjectが入ります。
# 以前はindex作成の部分をimlsにやらせたもんで倍近く時間がかかりました
# 今回、スクリプト自身にやらせたのでほぼ一瞬でできるようになりました

アーカイブ用ディレクトリは*先に作成しておいて*ください。

作業そのものがけっこうクリティカルなため、けっこう例外処理を含めていますが、
不完全なこと甚しいです。
実際に使うという方は、これでいいと思えるまでは変数nodelを1にして、削除しな
いようにしておきましょう。

  * スピードアップのため、冗長になっている部分の削除や変更
  * 安全性向上のため、例外で処理すべき部分の追加、正当性の確認

が目下の目標となっております。
ぶしつけですが、よろしくお願いいたします。

===
やさいはけんこうにいちばーん!たくさんたべんとおおきくなれんよー!
                                       (シルバー王女@クレヨン王国)
ばーい 佐藤 大輔/densuke@ga2.so-net.ne.jp
                 (CQD00116@niftyserve.or.jp)

	I don't read those mail(s):
		- with the header "Application/MS-*"
		- which cannot read due to "Moji bake"

PS. indexはEUCのまんまのほうがやっぱりいいかもしんない、どーでもいーけど
                                               (ホーレソレ@野菜の精風に)

#!/usr/bin/ruby

# === カスタマイズされうる変数

mailDir = "~/Mail"  # メールディレクトリ(後で展開されます)
archDir = "~/mail-archive" # アーカイブディレクトリ(同)
tar = "/bin/tar"

nodel = 0  # 1にすると削除しません

folders = [         # ["フォルダ名", (日数)] のペア 以下はサンプル
  ["ruby", 7],
  ["Linux-users", 7],
  ["Pilot-ML", 7],
  ["enkai-ML", 7],
  ["mew", 7],
  ["ppxp", 7],
  ["tlug-server", 7],
  ["xemacs", 2]
]

# === ここまで

require "mailread"  # メールの処理をしてくれます
require "parsedate" # 日付を処理してくれます
require "kconv"
include ParseDate

numRe = /^[0-9]+$/
retRe = /\n/

mailDir = File.expand_path(mailDir)
archDir = File.expand_path(archDir)
now = Time.now

i = 0
folders.each{ |folder|
  n = 0
  i += 1
  print "--- #{folder[0]} (#{i}/#{folders.size}) #{folder[1]}日以前---\n"
  begin
    dir = Dir.open(mailDir + "/" + folder[0])
  rescue
    $stderr.print "ディレクトリ #{folder[0]}のオープンに失敗しました\n(#{$!})\n"
    next
  end
  files = dir.collect { |f|
    if f =~ numRe then f else nil end
  }.sort { |a, b|
    a.to_i <=> b.to_i
  }.compact
  dir.close

  diff = folder[1] * 24 * 60 * 60
  list = []
  index = []
  
  files.each{ |file|
    mail = Mail.new(mailDir + "/" + folder[0] + "/" + file)
    y, m, d = parsedate(mail.header["Date"])
    fdate = Time.mktime(y, m, d)
    if (now - fdate) > diff then
      n += 1
      list << file
      begin
	from = Kconv.tojis(Kconv.toeuc(mail.header['From'].gsub(retRe, " "))[0..20])
      rescue
	from = " " * 20
      end
      begin
	subject = Kconv.tojis(Kconv.toeuc(mail.header['Subject'].gsub(retRe, " "))[0..40])
      rescue
	subject = " " * 40
      end
      index << sprintf("%5d %-20s | %-40s", file, from, subject)
    end
  }
  
  if n > 0 then
    print "#{n} ファイルありました。\n"
    arch = "#{archDir}/#{folder[0]}-#{now.strftime('%Y%m%d%H%M%S')}.tar.gz"
    begin
      Dir.chdir("#{mailDir}/#{folder[0]}")
    rescue
      $stderr.print "chdirに失敗しました(#{$!})\n"
      exit 1
    end
    print "インデックス生成中..."
    $stdout.flush
    ifile = open("00index", "w")
    index.each { |s|
      ifile.print "#{s}\n"
    }
    ifile.close
    print "アーカイブ中..."
    $stdout.flush
    begin
      fork {
	exec "#{tar} czf #{arch} 00index #{list.join(' ')}"
      }
    rescue
      $stderr.print "子プロセス実行時にエラーが発生しました\n(#{$!})\n"
    end
    Process.wait
    if $? > 0 then
      $stderr.print "失敗しました\n"
      exit 1
    end
    if nodel == 0 then
      print "削除中..."
      $stdout.flush
      list.push("00index")
      begin
	File.unlink(*list)
      rescue
	$stderr.print "ファイル #{file} の削除に失敗しました\n(#{$!})\n"
	exit 1
      end
      print "完了\n"
    end
  else
    print "削除すべきファイルはありません\n"
  end
}

In This Thread

Prev Next