table_analysis 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c714b1154af38fd8e20438d082b4e6b59a5e28ca86e5bed9c08a6415532bbfb
4
- data.tar.gz: 4a1feeb00edf08359c5d3940083ea52bd2bed4952a0a7177b6fe1d4f52bad453
3
+ metadata.gz: 6d14e89ab00de3db0ebfb32f5e28e32991c4ed82b9c2f47ba7591412dbe46668
4
+ data.tar.gz: e1dfa8cb739efed8ab5a1bf46b72ea6de6f7acdab2aef07945d3460a8f139340
5
5
  SHA512:
6
- metadata.gz: 253c452bf8e0e64309d2f961bdb43be522f8e6708303d62325e9dcb3508422c67b50d2c81c3d817e1bbcca430478da84875acdf538097623192572ee909dc76e
7
- data.tar.gz: 05bad6505409b3178b794588e0bd1d44f922b456215c9f886f1a74f38142d9f0f8c8da7181930801d60291156310ee3759e001d363ab296e180d71d0a1d2ea32
6
+ metadata.gz: b0ea4f6fe0d62f2b12935c1811629385bdc5c6b54cfce504a1890e2cac2cedbbe64760e9dc9d6e01e0a701ca77915347b1a19fece3f21e5bcd6a52f8b3e4bcb3
7
+ data.tar.gz: c7c8f0124b653386f472c2a76a90c60a7a2462a45372dcf22571524631ae0526bb4bb30f23f4797a550dc4cdac1a53f65dbc15095ca209334d3f5239ec07b45b
data/demo.rb ADDED
@@ -0,0 +1,5 @@
1
+ require './lib/table_analysis.rb'
2
+
3
+ doc = File.read('file/demo2.html')
4
+
5
+ TableAnalysis::Main.generator(doc, 1)
@@ -3,7 +3,7 @@ require_relative 'body'
3
3
  require_relative 'table'
4
4
 
5
5
  module TableAnalysis
6
- class Main
6
+ class Core
7
7
  attr_accessor :header, :table, :body_tds, :pointer, :x_max, :y_max
8
8
 
9
9
  def initialize(header, table, body_tds)
@@ -21,7 +21,6 @@ module TableAnalysis
21
21
  current_seat_position = seat_down
22
22
  reserved_seat(current_seat_position, body_td.rowspan, body_td.colspan) if body_td.reserved_seat?
23
23
  end
24
-
25
24
  @table
26
25
  end
27
26
 
@@ -33,7 +32,7 @@ module TableAnalysis
33
32
  # 坐下
34
33
  def seat_down
35
34
  if is_unreserved_seat?
36
- @table[@pointer[0]][@pointer[1]] = seat_down_value(@pointer)
35
+ @table[@pointer[0]][@pointer[1]] = seat_down_value
37
36
  current_seat_position = @pointer.dup
38
37
  pointer_increase
39
38
  current_seat_position
@@ -57,8 +56,8 @@ module TableAnalysis
57
56
  end
58
57
 
59
58
  # 身份值
60
- def seat_down_value(position)
61
- @header[position[1]]
59
+ def seat_down_value
60
+ @header[@pointer[1]]
62
61
  end
63
62
 
64
63
  def pointer_increase
@@ -1,11 +1,15 @@
1
1
  module TableAnalysis
2
2
  class Header
3
- def self.config(name, *trs)
3
+ def self.config(selected_cols, *trs)
4
4
  result = []
5
5
  trs.flatten.each do |tr|
6
- result << Array.new(tr.length) { tr.name.to_s == name.to_s ? 1 : 0 }
6
+ result << Array.new(tr.length)
7
7
  end
8
- result.flatten
8
+ result = result.flatten
9
+ selected_cols.each do |selected_col|
10
+ result[selected_col - 1] = 1
11
+ end
12
+ result.map! { |r| r.nil? ? 0 : r }
9
13
  end
10
14
  end
11
15
 
@@ -1,3 +1,3 @@
1
1
  module TableAnalysis
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,7 +1,56 @@
1
- require 'table_analysis/main.rb'
2
- require 'table_analysis/version.rb'
3
-
1
+ require_relative 'table_analysis/core'
2
+ require_relative 'table_analysis/version'
3
+ require 'nokogiri'
4
4
  module TableAnalysis
5
+ class Main
6
+ def self.generator(html, *selected_cols)
7
+ selected_cols = selected_cols.flatten
8
+ doc = Nokogiri::HTML(html, nil, 'utf-8')
9
+ # 多个table,仅处理第一个
10
+ table = doc.xpath('//table')[0]
11
+
12
+ header_content_tds = []
13
+ body_content_tds = []
14
+ body_tr_size = 0
15
+ table.xpath('./tr').each_with_index do |tr, tr_index|
16
+ if tr_index == 0
17
+ tr.xpath('./td').each do |td|
18
+ header_name = td.content
19
+ colspan = td.attribute('colspan')&.value
20
+ header_content_tds << [header_name, colspan]
21
+ end
22
+ else
23
+ body_tr_size += 1
24
+ tr.xpath('./td').each_with_index do |td, td_index|
25
+ rowspan = td.attribute('rowspan')&.value
26
+ colspan = td.attribute('colspan')&.value
27
+ body_content_tds << [rowspan, colspan]
28
+ end
29
+ end
30
+ end
31
+
32
+ header_tds = header_content_tds.map do |header_content_td|
33
+ TableAnalysis::HeaderTd.config(header_content_td[0], header_content_td[1])
34
+ end
35
+
36
+ header = TableAnalysis::Header.config(selected_cols, header_tds)
37
+ table = TableAnalysis::Table.config(body_tr_size, header)
38
+
39
+ body_tds = body_content_tds.map do |body_td|
40
+ TableAnalysis::BodyTd.config(body_td[0], body_td[1])
41
+ end
42
+
43
+ content_maps = TableAnalysis::Core.new(header, table, body_tds).entrance
44
+
45
+ header_map = [Array.new(header_tds.size){0}]
46
+
47
+ table_maps = header_map + content_maps
48
+
49
+ p table_maps
50
+ table_maps
51
+ end
52
+ end
53
+
5
54
  class Error < StandardError; end
6
55
  # Your code goes here...
7
56
  end
@@ -1,18 +1,17 @@
1
-
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "table_analysis/version"
3
+ require 'table_analysis/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "table_analysis"
6
+ spec.name = 'table_analysis'
8
7
  spec.version = TableAnalysis::VERSION
9
- spec.authors = ["mico_xiaozhen@sina.com"]
10
- spec.email = ["mico_xiaozhen@sina.com"]
8
+ spec.authors = ['mico_xiaozhen@sina.com']
9
+ spec.email = ['mico_xiaozhen@sina.com']
11
10
 
12
- spec.summary = %q{进行表格分析}
11
+ spec.summary = '进行表格分析'
13
12
  # spec.description = %q{TODO: Write a longer description or delete this line.}
14
- spec.homepage = "https://github.com/mico-xiaozhen/table_analysis"
15
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/mico-xiaozhen/table_analysis'
14
+ spec.license = 'MIT'
16
15
 
17
16
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
17
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -23,20 +22,21 @@ Gem::Specification.new do |spec|
23
22
  # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
24
23
  # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
25
24
  else
26
- raise "RubyGems 2.0 or newer is required to protect against " \
27
- "public gem pushes."
25
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
26
+ 'public gem pushes.'
28
27
  end
29
28
 
30
29
  # Specify which files should be added to the gem when it is released.
31
30
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
31
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
32
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
33
  end
35
- spec.bindir = "exe"
34
+ spec.bindir = 'exe'
36
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- spec.require_paths = ["lib"]
36
+ spec.require_paths = ['lib']
38
37
 
39
- spec.add_development_dependency "bundler", "~> 2.0"
40
- spec.add_development_dependency "rake", "~> 10.0"
41
- spec.add_development_dependency "rspec", "~> 3.0"
38
+ spec.add_development_dependency 'bundler', '~> 2.0'
39
+ spec.add_development_dependency 'rake', '~> 10.0'
40
+ spec.add_development_dependency 'rspec', '~> 3.0'
41
+ spec.add_development_dependency 'nokogirl', '~> 1.0'
42
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_analysis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mico_xiaozhen@sina.com
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogirl
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
55
69
  description:
56
70
  email:
57
71
  - mico_xiaozhen@sina.com
@@ -70,14 +84,13 @@ files:
70
84
  - Rakefile
71
85
  - bin/console
72
86
  - bin/setup
73
- - demo1.rb
74
- - demo2.rb
87
+ - demo.rb
75
88
  - file/demo2.html
76
89
  - lib/table_analysis.rb
77
90
  - lib/table_analysis/body.rb
91
+ - lib/table_analysis/core.rb
78
92
  - lib/table_analysis/double_dimensional_array.rb
79
93
  - lib/table_analysis/header.rb
80
- - lib/table_analysis/main.rb
81
94
  - lib/table_analysis/table.rb
82
95
  - lib/table_analysis/version.rb
83
96
  - table_analysis.gemspec
data/demo1.rb DELETED
@@ -1,28 +0,0 @@
1
- require_relative 'main'
2
-
3
- header_content_tds = [
4
- ['姓名', 1], ['年龄', 1], ['内容', 2] # [name, colspan]
5
- ]
6
-
7
- body_content_tds = [
8
- [1, 1], [1, 1], [1, 1], [1, 1], # //tr//td [rowspan, colspan]
9
- [1, 1], [3, 1], [1, 2],
10
- [2, 1], [1, 2],
11
- [1, 1], [1, 1]
12
- ]
13
-
14
- find_name = '姓名'
15
- tr_sizes = 4
16
-
17
- headerTds = header_content_tds.map do |header_content_td|
18
- TableAnalysis::HeaderTd.config(header_content_td[0], header_content_td[1])
19
- end
20
-
21
- header = TableAnalysis::Header.config(find_name, headerTds)
22
- table = TableAnalysis::Table.config(tr_sizes, header)
23
-
24
- body_tds = body_content_tds.map do |body_td|
25
- TableAnalysis::BodyTd.config(body_td[0], body_td[1])
26
- end
27
-
28
- p TableAnalysis::Main.new(header, table, body_tds).entrance
data/demo2.rb DELETED
@@ -1,41 +0,0 @@
1
- require_relative 'main'
2
- require 'nokogiri'
3
-
4
- doc = File.open('file/demo2.html') { |f| Nokogiri::HTML(f, nil, 'utf-8') }
5
- tables = doc.xpath('//table')
6
- tables.each do |table|
7
- header_content_tds = []
8
- body_content_tds = []
9
- tr_sizes = 0
10
- table.xpath('./tr').each_with_index do |tr, index|
11
- if index == 0
12
- tr.xpath('./td').each do |td|
13
- header_name = td.content
14
- colspan = td.attribute('colspan')&.value
15
- header_content_tds << [header_name, colspan]
16
- end
17
- else
18
- tr_sizes += 1
19
- tr.xpath('./td').each do |td|
20
- rowspan = td.attribute('rowspan')&.value
21
- colspan = td.attribute('colspan')&.value
22
- body_content_tds << [rowspan, colspan]
23
- end
24
- end
25
- end
26
- # p header_content_tds
27
- # p body_content_tds
28
- p find_name = header_content_tds[1][0].delete('\n').strip
29
- headerTds = header_content_tds.map do |header_content_td|
30
- TableAnalysis::HeaderTd.config(header_content_td[0], header_content_td[1])
31
- end
32
- # p headerTds
33
- header = TableAnalysis::Header.config(find_name, headerTds)
34
- table = TableAnalysis::Table.config(tr_sizes, header)
35
- # p header
36
- body_tds = body_content_tds.map do |body_td|
37
- TableAnalysis::BodyTd.config(body_td[0], body_td[1])
38
- end
39
- # p body_tds
40
- p TableAnalysis::Main.new(header, table, body_tds).entrance
41
- end