トップ «前の日記(2006-02-21) 最新 次の日記(2006-02-23)» 編集

Pyon's Diary

[はてなブックマーク登録数] [Google に登録] [RSS フィード] Gourmet Hardware Programming Society Software
成る可くJIS X 0213:2004對應MSフォント(5.0)、IPAフォント(003.02)で御覽下さい

2006-02-22 舊 平成拾捌年睦月廿伍日 (水・晴) [長年日記]

[節] Ruby で Excel 仕樣の CSV 形式ファイルを讀込む。(其之壹)

Perl メモ: 値に改行コードを含む CSV 形式を扱ふのコードを Ruby に置換へてみた。最初に Perl メモのコードを出來るだけ正直に置換へてみた。

以下のコードは 3000 行、20 列の Excel 仕樣の CSV 形式ファイルを讀込み、各セルの中身から復歸・改行を取除き、「|」を区切り文字にして結合して標準出力に出力するもの。ファイルのエンコーディングは UTF-8 にした。

csv.rb

#!/usr/bin/ruby -Ku
t = Time.now
buffer = ""
ARGF.each do |line|
	next if ((buffer += line).count("\x22") % 2) != 0
	buffer.sub!(/(?:\x0D\x0A|[\x0D\x0A])?\Z/m, ",") 
	#
	columns = []
	while ! buffer.nil?
		elm, buffer = /\A(\x22[^\x22]*(?:\x22\x22[^\x22]*)*\x22|[^,]*),(.*)?\Z/m.match(buffer).to_a[1,2]
		next if ! elm
		if elm.sub!(/\A\x22(.*)\x22\Z/m, "\\1")
			columns << elm.gsub(/\x22\x22/, "\x22")
		else
			columns << elm
		end
	end
	buffer = ""
	#
	columns.map!{|e| e ? e.gsub(/[\r\n]+/m, " ") : ""}
	print columns.join("|") + "\n"
end
STDERR.printf("ETime: %e (sec)\n", Time.now - t)

實行結果は以下の通り。

$ ./csv.rb test.csv > output.0.txt
ETime: 4.595411e+00 (sec)

次に以下の樣に正規表現を分轄して評價を行ふ樣にしてみた。

csv1.rb

#!/usr/bin/ruby -Ku
t = Time.now
buffer = ""
ARGF.each do |line|
	next if ((buffer += line).count('"') % 2) != 0
	buffer.sub!(/(?:\r\n|[\r\n])?\Z/mo, ',') 
	#
	columns = []
	while ! buffer.nil?
		if /\A"([^"]*(?:""[^"]*)*)",/mo =~ buffer
			buffer = $'
			columns << $~[1].gsub(/""/, '"')
		elsif /\A([^,]*),/mo =~ buffer
			buffer = $'
			collumns << $~[1]
		else
			buffer = nil
		end
	end
	buffer = ""
	#
	columns.map!{|e| e ? e.gsub(/[\r\n]+/m, " ") : ""}
	print columns.join("|") + "\n"
end
STDERR.printf("ETime: %e (sec)\n", Time.now - t)

此の實行結果は以下の通り。

$ ./csv1.rb test.csv > output.1.txt
ETime: 2.531840e+00 (sec)

何囘か繰り返し實行してみたが、二番目の方が矢張り微妙に速かつた。此から Ruby で Excel 仕樣の CSV ファイルを讀込む必要が有る時は、此方を使ふ事にする。(其之貳へ)

Tags: Programming | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] GNU screen を使ふ。(其之肆)

(其之參へ) けふ初めて GNU screen で畫面分轄が出來る事を知つた。

  • ^zS -- 畫面分轄。
  • ^zQ -- 畫面分轄解除。
  • ^zTAB -- 分轄された領域を巡囘する。

キーの組合はせが今一つ、自分には使ひ辛いが其之内慣れるでせう。(其之伍へ)

Tags: Software | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] HTTP_Request (1.3.0) では HTTPS Proxy が使へない。

ウェブ頁を携帶用に變換して呉れる pc2m を調べてゐて氣が附いたのだが、PEARHTTP_Request 1.3.0 はソースを讀むと HTTPS Proxy に對應してゐなかつた。

604 // 4.3.0 supports SSL connections using OpenSSL. The function test determines
605 // we running on at least 4.3.0
606 if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) {
607     if (isset($this->_proxy_host)) {
608         return PEAR::raiseError('HTTPS proxies are not supported.');
609     }
610     $host = 'ssl://' . $host;
611 }

此が駄目だと嚴しいな。自力で何とかするのも面倒臭いし。

追記: 1.4.0 では。(2006-11-02)

HTTP_Request の 1.4.0 が出てゐた事に氣が附いたので、ソースを眺めて診たが、矢張り HTTPS Proxy には對應してゐ無かつた。

Google で情報を探してみたら、

と云ふ記事を見附けて仕舞つた。端から對應出來無い模樣。CURL を使へ、と囘答されてゐる。

Tags: Programming | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] 晩御飯。

  • 松屋。
Tags: None | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink
[]

© pyon