[#30920] [REQ] Regexp#match! — Minero Aoki <aamine@...>

あおきです。

19 messages 2001/08/16

[#30945] file exist check method? — "Inoue" <inoue@...>

井上です。

98 messages 2001/08/17
[#30947] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/17

こんにちは、なかむら(う)です。

[#30949] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/17

新井です。

[#30950] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/17

こんにちは、なかむら(う)です。

[#30951] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/17

新井です。

[#30953] Re: file exist check method? — nobu.nakada@... 2001/08/17

なかだです。

[#30954] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/17

新井です。

[#30955] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/17

こんにちは、なかむら(う)です。

[#30956] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/17

新井です。

[#30958] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/18

こんにちは、なかむら(う)です。

[#30962] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/18

新井です。

[#30963] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/18

こんにちは、なかむら(う)です。

[#30965] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/18

新井です。

[#30969] Re: file exist check method? — nobu.nakada@... 2001/08/18

なかだです。

[#30970] Re: file exist check method? — Koji Arai <JCA02266@...> 2001/08/18

新井です。

[#30981] Re: file exist check method? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/18

もりきゅうです。長文ごめんなさい。

[#30983] Re: file exist check method? — IWATSUKI Hiroyuki <don@...> 2001/08/18

岩月と申します。そろそろ寝なくては。

[#30988] Re: file exist check method? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/19

もりきゅうです。

[#30989] Re: file exist check method? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/19

もりきゅうです。

[#30997] Re: file exist check method? — nobu.nakada@... 2001/08/19

なかだです。

[#31020] Re: file exist check method? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/20

もりきゅうです。

[#31022] Re: file exist check method? — maili31s@... (SugHimsi == SUGIHARA Hiroshi) 2001/08/20

すぎむし。

[#31024] Re: file exist check method? — nobu.nakada@... 2001/08/20

なかだです。

[#31025] File#join — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/20

もりきゅうです。subject 変えました。

[#31029] Re: File#join — Kazuhiro NISHIYAMA <zn@...> 2001/08/21

In <200108201823.AA00825@yoshida.nifty.ne.jp>

[#31079] Re: File#join — "K.Umakoshi" <pegacorn@...> 2001/08/22

File#join とか File#split とか使った事ないんですが…

[#31062] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/21

こんにちは、なかむら(う)です。

[#31065] Re: file exist check method? — nobu.nakada@... 2001/08/22

なかだです。

[#31067] Re: file exist check method? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/08/22

もりきゅうです。

[#31068] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/22

こんにちは、なかむら(う)です。

[#31073] Re: file exist check method? — nobu.nakada@... 2001/08/22

なかだです。

[#31082] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/22

こんにちは、なかむら(う)です。

[#31087] Re: file exist check method? — nobu.nakada@... 2001/08/23

なかだです。

[#31094] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/23

こんにちは、なかむら(う)です。

[#31096] Re: file exist check method? — "U.Nakamura" <usa@...> 2001/08/23

こんにちは、なかむら(う)です。

[#31005] インストールしました — 嶋崎 正貴 <hayashih@...>

嶋崎と申します

15 messages 2001/08/20

[#31144] create_process または Win での外部コマンド実行 — Take_tk <ggb03124@...>

Windows で外部コマンドを実行するにはどういう方法があるのでしょうか?。

33 messages 2001/08/29
[#31145] Re: create_process または Win での外部コマンド実行 — "U.Nakamura" <usa@...> 2001/08/29

こんにちは、なかむら(う)です。

[#31152] Re: create_process または Win での外部コマンド実行 — nobu.nakada@... 2001/08/29

なかだです。

[#31153] Re: create_process または Win での外部コマンド実行 — Take_tk <ggb03124@...> 2001/08/29

たけ(tk)です。

[ruby-list:31085] Re: File#join

From: nobu.nakada@...
Date: 2001-08-23 02:47:42 UTC
List: ruby-list #31085
なかだです。

At Wed, 22 Aug 2001 23:21:23 +0900,
K.Umakoshi <pegacorn@jcom.home.ne.jp> wrote:
> File#join とか File#split とか使った事ないんですが…
> ファイル名を扱うクラスがあればいいなと思って、
> ruby の勉強を兼ねてこんなクラスを作ってます。

 こういうのがあれば別のプラットフォーム用のパス名を扱うことが
できるかも知れません。とりあえず私も作ってみたので添付します。

> class FileName < String
>   PF_UNIX = 0

 Socket::PF_UNIXと紛らわしくないでしょうか。それにこうやって場
合分けをするよりも、Unix用、Windows用、DOS用のクラスにしたいよ
うな気も。

>     PLATFORM = PF_DOS
>     Separator = '\\'
>     Separators = Separator

 DOSでもシステムコールレベルでは'/'も有効だったと思います。そ
れにFile::SEPARATOR, File::ALT_SEPARATORという定数が既に用意さ
れているので、そっちを使ったほうが面倒が少なそうです。もしくは
上記のようにプラットフォーム別のクラスにするなら、それぞれの定
数にするか。

>   def <=>(name)
>     case PLATFORM
>     when PF_WINDOWS || PF_DOS

 これだとPF_DOSにはマッチしません。

    when PF_WINDOWS, PF_DOS

>   def clean
>     clean(self)
>   end

 再帰しようとしてArgumentErrorになりそうです。

    type.clean(self)

> [3 TestFileName.rb <text/plain; iso-2022-jp (7bit)>]
(snip)
>     s1 = FileName.new('a')
>     s2 = FileName.new('A')
>     assert(s1.icasecmp(s2) == 0)

 すいません、これって正しいんでしょうか。


class File
  class Name < String
    def self.clean(path)
      return "" if path.empty?
      paths = path.split(self::Separators)
      paths[0] ||= ""
      clean_paths = Array.new
      paths.each do |elm|
	case elm
	when '.'
	  # abandon
	when '..'
	  case clean_paths.last
	  when nil, '..'
	    clean_paths.push(elm)
	  when ''
	    # abandon
	  else
	    clean_paths.pop 
	  end
	else
	  clean_paths.push(elm)
	end
      end
      if clean_paths.empty?
	clean_paths.push(".")
      elsif clean_paths.last.empty?
	clean_paths.push("")
      end
      clean_paths.join(self::Separator)
    end

    def self.split(path)
      if i = path.rindex(self::Separators)
	return path[0, i.nonzero? || 1], path[i.next..-1]
      else
	return ".", path
      end
    end

    def self.join(path, *paths)
      paths.each do |elem|
	m = elem.rindex(self::Separators, 0)
	if path.index(self::Separators, -1)
	  elem = m.post_match if m
	else
	  path << self::Separator unless m
	end
	path << elem
      end
      path
    end

    def clean
      type.clean(self)
    end

    def <=>(name)
      clean <=> type.clean(name)
    end

    def ==(name)
      (self <=> name).zero?
    end

    class Unix < Name
      Separator = '/'
      Separators = /\/+/
    end

    class DOS < Name
      Separator = '\\'
      Separators = /[\\\/:]+/
      Drive = /\A[a-z]:/i

      def self.clean(path)
	if m = Drive.match(path)
	  m[0]+super(m.post_match)
	else
	  super
	end
      end

      def self.split(path)
	if m = Drive.match(path)
	  dir, base = super(m.post_match)
	  return m[0]+dir, base
	else
	  super
	end
      end

      def <=>(name)
	clean.upcase <=> type.clean(name).upcase
      end
    end

    class Windows < DOS
      UNC = /\A[\\\/]{2}/
      def self.clean(path)
	if UNC === path
	  self::Separator+super
	else
	  super
	end
      end
    end

    Default = case RUBY_PLATFORM
	      when /cygwin|mswin32|mingw/
		Windows
	      when /djgpp/
		DOS
	      else
		Unix
	      end
  end

  def self.Name(path = nil)
    name = Name::Default
    name = name.new(path) if path
    name
  end
end


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread