mymatrix 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ class FileIO
3
+ # ファイルオープン時、パス文字列のエンコードを変換してシステムに返却するためのメソッド
4
+ def self.encodePath(path)
5
+ case self.filesystem
6
+ when 'u'
7
+ #utf8=>utf8なので何もしない
8
+ #path = MyMatrix.toutf8(path)
9
+ #path.encode('UTF-8')
10
+ path
11
+ when 's'
12
+ path = MyMatrix.tosjis(path)
13
+ #path.encode('Windows-31J')
14
+ when 'w'
15
+ path = MyMatrix.tosjis(path)
16
+ #path.encode('Windows-31J')
17
+ when 'm'
18
+ path = MyMatrix.toUtf8Mac(path)
19
+ end
20
+ end
21
+ def self.filesystem
22
+ #platform check
23
+ if(RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/)
24
+ filesystem = 's'
25
+ elsif(RUBY_PLATFORM.downcase =~ /darwin/)
26
+ filesystem = 'm'
27
+ elsif(RUBY_PLATFORM.downcase =~ /linux/)
28
+ filesystem = 'u'
29
+ else
30
+ filesystem = 'u'
31
+ end
32
+ return filesystem
33
+ end
34
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'file_io'
3
+ class LoaderCsv < FileIO
4
+ def self.makeMatrix(file, opts={:offset=>0})
5
+ #CSV読み込みメソッド
6
+ #1.9系ではFasterCSVを使えない
7
+ if(RUBY_VERSION =~ /1\.[^9]/)
8
+ #1.8以下の場合
9
+ require 'fastercsv'
10
+ csv = FasterCSV
11
+ else
12
+ #1.9以上の場合
13
+ require 'csv'
14
+ Encoding.default_external = 'Windows-31J'
15
+ csv = CSV
16
+ end
17
+ out = []
18
+ i= 0
19
+ syspath = self.encodePath(file)
20
+ csv.foreach(syspath, {:row_sep => "\r\n", :encoding => 'Shift_JIS'}) do |row|
21
+ if(opts[:offset])
22
+ if(opts[:offset] < i)
23
+ next
24
+ end
25
+ end
26
+ #「1,300台」などカンマが使われている場合、「"1,300台"」となってしまうので、カンマを無視する
27
+ newRow = []
28
+ row.each do |cell|
29
+ cell = cell.to_s
30
+ cell ||= ''
31
+ cell = MyMatrix.toutf8(cell)
32
+ #cell = cell.gsub(/^\"/, "")
33
+ #cell = cell.gsub(/\"$/, "")
34
+ #"
35
+ newRow << cell
36
+ end
37
+ out << newRow
38
+ i += 1
39
+ end
40
+ return out
41
+
42
+
43
+ end
44
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'loader_xls'
3
+ require 'loader_csv'
4
+ require 'loader_txt'
5
+ class LoaderFactory
6
+ def self.load(file, opts)
7
+ mx = []
8
+ if(file =~ /\.xls$/)
9
+ mx = LoaderXls.makeMatrix(file, opts)
10
+ elsif(@file =~ /(\.tsv|\.txt|\.TSV|\.TXT)/)
11
+ mx = LoaderTxt.makeMatrix(file, opts)
12
+ elsif(file =~ /(\.csv|\.CSV)/)
13
+ mx = LoaderCsv.makeMatrix(file, opts)
14
+ elsif(file == nil)
15
+ else
16
+ #デフォルトはTSVで読み込むようにする。
17
+ mx = LoaderTxt.makeMatrix(file, opts)
18
+ end
19
+ mx = self.clean(mx)
20
+ return mx
21
+ end
22
+ def self.clean(mx)
23
+ #@mxの末尾に空レコードが入っていたら、その空白を削除
24
+ while(mx[mx.size-1] && mx[mx.size-1].join == '')
25
+ mx.pop
26
+ end
27
+ if(mx.size == 0)
28
+ mx = []
29
+ end
30
+ return mx
31
+ end
32
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'file_io'
3
+ class LoaderTxt < FileIO
4
+ def self.makeMatrix(file, opts={:sep=>"\t", :offset=>0})
5
+ #TSV: tab separated value 読み込みメソッド
6
+
7
+ out = []
8
+ epath = encodePath(file)
9
+ if(!File.exist?(epath))
10
+ open(epath, 'w') do |fo|
11
+ fo.print("\n\n")
12
+ end
13
+ end
14
+ path = self.encodePath(file)
15
+ fi = open(path, "r:Windows-31J")
16
+ if(opts[:offset])
17
+ opts[:offset].times do |i|
18
+ fi.gets
19
+ end
20
+ end
21
+ opts[:sep]||="\t"
22
+ fi.each do |line|
23
+ row = MyMatrix.toutf8(line).chomp.split(/#{opts[:sep]}/)
24
+ #「1,300台」などカンマが使われている場合、「"1,300台"」となってしまうので、カンマを無視する
25
+ newRow = []
26
+ row.each do |cell|
27
+ stri = cell.dup
28
+ stri.gsub!(/^\"(.*)\"$/, '\1')
29
+ #"
30
+ stri.gsub!(/""/, '"')
31
+ newRow << stri
32
+ end
33
+ out << newRow
34
+ end
35
+ fi.close
36
+ return out
37
+
38
+
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'file_io'
3
+ require 'spreadsheet'
4
+ class LoaderXls < FileIO
5
+ def self.makeMatrix(file, opts={ })
6
+ # xls読み込みメソッド
7
+ if(opts)
8
+ offset = opts[:offset]
9
+ sheet = opts[:sheet]
10
+ end
11
+ offset ||= 0
12
+ sheet ||= 0
13
+
14
+ out = []
15
+ #todo xlsFileがなかったら作成
16
+ path = self.encodePath(file)
17
+ xl = Spreadsheet.open(path, 'rb')
18
+ sheet = xl.worksheet(sheet)
19
+ rowsize = sheet.last_row_index
20
+ (rowsize+1-offset).times do |i|
21
+ row = sheet.row(i+offset)
22
+ orow = []
23
+ row.each do |ele|
24
+ #様々な型で値が入っている。改行も入っている
25
+ if(ele.class == Float)&&(ele.to_s =~ /(\d+)\.0/)
26
+ ele = $1
27
+ end
28
+ if(ele.class == Spreadsheet::Formula)
29
+ ele = ele.value
30
+ end
31
+ if(ele == nil)
32
+ ele = ''
33
+ end
34
+ ele = ele.to_s.gsub(/\n/, '<br>')
35
+ orow << ele
36
+ end
37
+ out << orow
38
+ end
39
+ return out
40
+ end
41
+ end
@@ -1,18 +1,17 @@
1
1
  #!/usr/bin/ruby -Ku
2
2
  # -*- encoding: utf-8 -*-
3
- require "mymatrix/version"
4
- require 'loader_factory'
5
-
6
-
7
3
  $:.unshift(File.dirname(__FILE__)) unless
8
4
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
9
-
5
+ require "mymatrix/version"
10
6
  require 'rubygems'
11
7
  require 'nkf'
12
8
  require 'logger'
13
9
  require 'pp'
14
10
  require 'enumerable_ex' #verbose_each
15
11
 
12
+ require 'loader_factory'
13
+
14
+
16
15
  if(RUBY_VERSION =~ /1\.[^9]/)
17
16
  $KCODE='UTF8'
18
17
  end
@@ -42,7 +41,7 @@ class MyMatrix
42
41
  @log.level = Logger::DEBUG
43
42
  @file = file
44
43
 
45
- @mx = []
44
+
46
45
  @mx = LoaderFactory.load(@file, opts)
47
46
 
48
47
 
@@ -1,3 +1,3 @@
1
1
  class MyMatrix
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mymatrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2152540560 !ruby/object:Gem::Requirement
16
+ requirement: &2160859920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2152540560
24
+ version_requirements: *2160859920
25
25
  description: mymatrix is a handling library for MS Excel and csv/tsv text.
26
26
  email:
27
27
  - yukihico@gmail.com
@@ -31,6 +31,11 @@ extra_rdoc_files: []
31
31
  files:
32
32
  - Gemfile
33
33
  - Rakefile
34
+ - lib/file_io.rb
35
+ - lib/loader_csv.rb
36
+ - lib/loader_factory.rb
37
+ - lib/loader_txt.rb
38
+ - lib/loader_xls.rb
34
39
  - lib/mymatrix.rb
35
40
  - lib/mymatrix/version.rb
36
41
  - mymatrix.gemspec