table_analysis 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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