itools 0.1.3 → 0.1.4
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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +4 -0
- data/bin/itools +7 -0
- data/itools.gemspec +1 -0
- data/lib/itools.rb +1 -0
- data/lib/itools/link_map.rb +235 -235
- data/lib/itools/version.rb +1 -1
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 572fcb73d2ed042ab8d43f2ae359cc22c46f7b1a91c70aa53dcdadf424a65b3d
|
4
|
+
data.tar.gz: 1fb8249f6f2d8934c7b7d04712b310d1465cbb1c253e8f950fe7be2efab9e628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d4bb2508282c6ec1b8ef24e3ac60fa80e648c16ddffb8bbe4a52f641801eb1178105139fcc10b8deee6c63966b4e965073b39f11e5fcdcc73d8e15c8539a30c
|
7
|
+
data.tar.gz: 5ebe0bced44d8a2c33dee0f949ddc4ed4c86d2544585da1909d7ac1ec68566e385fb3280b408415b41ac4594553dc64e47af658b36da3d18611de7606b2f03a6
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -8,6 +8,9 @@ GEM
|
|
8
8
|
specs:
|
9
9
|
gli (2.18.0)
|
10
10
|
rake (10.4.2)
|
11
|
+
ruby-ole (1.2.12.1)
|
12
|
+
spreadsheet (1.1.8)
|
13
|
+
ruby-ole (>= 1.0)
|
11
14
|
|
12
15
|
PLATFORMS
|
13
16
|
ruby
|
@@ -17,6 +20,7 @@ DEPENDENCIES
|
|
17
20
|
gli (~> 2.17)
|
18
21
|
itools!
|
19
22
|
rake (~> 10.0)
|
23
|
+
spreadsheet (~> 1.1.8)
|
20
24
|
|
21
25
|
BUNDLED WITH
|
22
26
|
1.17.1
|
data/bin/itools
CHANGED
@@ -15,4 +15,11 @@ command :parse do |c|
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
desc "search str(or strs) in some file(or folder's file)"
|
19
|
+
arg 'xxx.txt'
|
20
|
+
command :search do |c|
|
21
|
+
c.action do |global_options, options, args|
|
22
|
+
Itools::StringSearcher.search_result(args[0],args[1])
|
23
|
+
end
|
24
|
+
end
|
18
25
|
exit run(ARGV)
|
data/itools.gemspec
CHANGED
@@ -38,4 +38,5 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_development_dependency "bundler", "~> 1.17"
|
39
39
|
spec.add_development_dependency "rake", "~> 10.0"
|
40
40
|
spec.add_development_dependency "gli", "~> 2.17"
|
41
|
+
spec.add_development_dependency "spreadsheet", '~> 1.1', '>= 1.1.8'
|
41
42
|
end
|
data/lib/itools.rb
CHANGED
data/lib/itools/link_map.rb
CHANGED
@@ -2,251 +2,251 @@ require 'fileutils'
|
|
2
2
|
require 'pathname'
|
3
3
|
|
4
4
|
module Itools
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
# ---------------------------------ObjectFile class---------------------------------
|
6
|
+
class ObjectFile
|
7
|
+
attr_accessor :serial_number, :file_path, :file_name
|
8
|
+
def initialize()
|
9
|
+
@serial_number = []
|
10
|
+
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
end
|
13
|
+
# ---------------------------------Sections class---------------------------------
|
14
|
+
class Sections
|
15
|
+
attr_accessor :address, :size, :segment, :section
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
end
|
18
|
+
# ---------------------------------Symbols class---------------------------------
|
19
|
+
class Symbols
|
20
|
+
attr_accessor :s_address, :s_size, :s_file_serial_number, :s_name
|
21
|
+
def initialize
|
22
|
+
@s_file_serial_number = -1 #防止为0
|
23
|
+
end
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
# ---------------------------------DSSymbols class---------------------------------
|
27
|
+
class DSSymbols
|
28
|
+
attr_accessor :size, :file, :name
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
31
|
+
# ---------------------------------LinkMap class---------------------------------
|
32
|
+
class LinkMap
|
33
|
+
# 包含的属性
|
34
|
+
attr_accessor :l_name, :l_path, :l_arch, :l_obj_files, :l_sections, :l_symbols, :l_dead_stripped_symbols, :l_sym_map
|
35
|
+
# 初始化方法
|
36
|
+
def initialize(fName)
|
37
|
+
@l_name = fName
|
38
|
+
@l_obj_files = []
|
39
|
+
@l_symbols = []
|
40
|
+
@l_sections = []
|
41
|
+
@l_dead_stripped_symbols = []
|
42
|
+
end
|
43
|
+
# 得到path
|
44
|
+
def get_path(str)
|
45
|
+
splitparam = str.split(" ")
|
46
|
+
@l_path = splitparam.last
|
47
|
+
end
|
48
|
+
# 处理object文件
|
49
|
+
def handle_ojbect_files(str)
|
50
|
+
tempSplit = str.split("]")
|
51
|
+
if tempSplit.size > 1
|
52
|
+
obj_file = ObjectFile.new
|
53
|
+
obj_file.serial_number = tempSplit[0].delete("[").strip.to_i #设置serial_number
|
54
|
+
obj_file.file_path = tempSplit[1].strip
|
55
|
+
obj_file.file_name = tempSplit[1].split("/").last.chomp
|
56
|
+
l_obj_files << obj_file
|
57
|
+
end
|
58
|
+
end
|
59
|
+
# 处理sections
|
60
|
+
def handle_sections(str)
|
61
|
+
sectionSplit = str.split(" ")
|
62
|
+
if sectionSplit.size == 4
|
63
|
+
section = Sections.new
|
64
|
+
section.address = sectionSplit[0]
|
65
|
+
section.size = sectionSplit[1]
|
66
|
+
section.segment = sectionSplit[2]
|
67
|
+
section.section = sectionSplit[3]
|
68
|
+
l_sections << section
|
69
|
+
end
|
70
|
+
end
|
71
|
+
# get arch
|
72
|
+
def get_arch(str)
|
73
|
+
splitparam = str.split(" ")
|
74
|
+
@l_arch = splitparam.last
|
75
|
+
end
|
76
|
+
# 处理Symbols
|
77
|
+
def handle_symbols(str)
|
78
|
+
# 字符编码产生的异常处理
|
79
|
+
begin
|
80
|
+
symbolsSplit = str.split("\t")
|
81
|
+
rescue => exception
|
82
|
+
return
|
83
|
+
end
|
84
|
+
if symbolsSplit.size > 2
|
85
|
+
symbol = Symbols.new
|
86
|
+
symbol.s_address = symbolsSplit[0]
|
87
|
+
symbol.s_size = symbolsSplit[1]
|
88
|
+
# 获取编号和名字
|
89
|
+
serial_name_str = symbolsSplit[2]
|
90
|
+
file_and_name_split = serial_name_str.split("]")
|
91
|
+
if file_and_name_split.size > 1
|
92
|
+
symbol.s_file_serial_number = file_and_name_split[0].delete("[").strip.to_i #设置文件编号
|
93
|
+
symbol.s_name = file_and_name_split[1]
|
57
94
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
symbol.s_file_serial_number = file_and_name_split[0].delete("[").strip.to_i #设置文件编号
|
93
|
-
symbol.s_name = file_and_name_split[1]
|
94
|
-
end
|
95
|
-
|
96
|
-
l_symbols << symbol
|
97
|
-
else
|
98
|
-
end
|
99
|
-
end
|
100
|
-
# 处理symbols的数组,把symbols转换成hashmap
|
101
|
-
def handle_l_sym_map
|
102
|
-
@l_sym_map = @l_symbols.group_by(&:s_file_serial_number)
|
103
|
-
if @l_sym_map.include?(-1)
|
104
|
-
puts "移除无用元素"
|
105
|
-
@l_sym_map.delete(-1)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
# 处理link map file
|
109
|
-
def handle_map
|
110
|
-
handle_method_name = ""
|
111
|
-
File.read(@l_name).each_line do |line|
|
112
|
-
if line[0] == "#"
|
113
|
-
if line.include?("Path:")
|
114
|
-
handle_method_name = "get_path"
|
115
|
-
puts "处理path..."
|
116
|
-
elsif line.include?("Arch:")
|
117
|
-
handle_method_name = "get_arch"
|
118
|
-
puts "处理Arch..."
|
119
|
-
elsif line.include?("Object files")
|
120
|
-
handle_method_name = "handle_ojbect_files"
|
121
|
-
puts "处理Object files..."
|
122
|
-
elsif line.include?("Sections")
|
123
|
-
handle_method_name = "handle_sections"
|
124
|
-
puts "处理Sections..."
|
125
|
-
elsif line.include?("Symbols:") #symbols:和Dead Stripped Symbols处理一样
|
126
|
-
puts "处理#{line.delete('#').strip}..."
|
127
|
-
handle_method_name = "handle_symbols"
|
128
|
-
end
|
129
|
-
end
|
130
|
-
self.send(handle_method_name, line)
|
131
|
-
|
132
|
-
end
|
133
|
-
end
|
134
|
-
def self.parser(path_para)
|
135
|
-
start_time = Time.now.to_i #程序开始执行时间(以毫秒为单位)
|
136
|
-
# 获取link map file's name
|
137
|
-
link_map_file_name = path_para
|
138
|
-
puts "获取的文件路径为:#{link_map_file_name}"
|
139
|
-
if link_map_file_name.nil?
|
140
|
-
puts "请按照如下命令执行该脚本:"
|
141
|
-
puts "\033[31mruby linkMapParse.rb **.txt \033[0m"
|
142
|
-
puts "**指代Link Map File的名字,例如LinkMapApp-LinkMap-normal-x86_64.txt"
|
143
|
-
exit
|
144
|
-
end
|
145
|
-
if File.exist?(link_map_file_name)
|
146
|
-
puts "\033[32m获取LinkMap文件: #{link_map_file_name}成功,开始分析数据...\033[0m"
|
147
|
-
else
|
148
|
-
puts "\033[31m#{link_map_file_name}文件不存在,请重新输入文件 \033[0m"
|
149
|
-
exit
|
95
|
+
|
96
|
+
l_symbols << symbol
|
97
|
+
else
|
98
|
+
end
|
99
|
+
end
|
100
|
+
# 处理symbols的数组,把symbols转换成hashmap
|
101
|
+
def handle_l_sym_map
|
102
|
+
@l_sym_map = @l_symbols.group_by(&:s_file_serial_number)
|
103
|
+
if @l_sym_map.include?(-1)
|
104
|
+
puts "移除无用元素"
|
105
|
+
@l_sym_map.delete(-1)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
# 处理link map file
|
109
|
+
def handle_map
|
110
|
+
handle_method_name = ""
|
111
|
+
File.read(@l_name).each_line do |line|
|
112
|
+
if line[0] == "#"
|
113
|
+
if line.include?("Path:")
|
114
|
+
handle_method_name = "get_path"
|
115
|
+
puts "处理path..."
|
116
|
+
elsif line.include?("Arch:")
|
117
|
+
handle_method_name = "get_arch"
|
118
|
+
puts "处理Arch..."
|
119
|
+
elsif line.include?("Object files")
|
120
|
+
handle_method_name = "handle_ojbect_files"
|
121
|
+
puts "处理Object files..."
|
122
|
+
elsif line.include?("Sections")
|
123
|
+
handle_method_name = "handle_sections"
|
124
|
+
puts "处理Sections..."
|
125
|
+
elsif line.include?("Symbols:") #symbols:和Dead Stripped Symbols处理一样
|
126
|
+
puts "处理#{line.delete('#').strip}..."
|
127
|
+
handle_method_name = "handle_symbols"
|
128
|
+
end
|
150
129
|
end
|
130
|
+
self.send(handle_method_name, line)
|
151
131
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
132
|
+
end
|
133
|
+
end
|
134
|
+
def self.parser(path_para)
|
135
|
+
start_time = Time.now.to_i #程序开始执行时间(以毫秒为单位)
|
136
|
+
# 获取link map file's name
|
137
|
+
link_map_file_name = path_para
|
138
|
+
puts "获取的文件路径为:#{link_map_file_name}"
|
139
|
+
if link_map_file_name.nil?
|
140
|
+
puts "请按照如下命令执行该脚本:"
|
141
|
+
puts "\033[31mruby linkMapParse.rb **.txt \033[0m"
|
142
|
+
puts "**指代Link Map File的名字,例如LinkMapApp-LinkMap-normal-x86_64.txt"
|
143
|
+
exit
|
144
|
+
end
|
145
|
+
if File.exist?(link_map_file_name)
|
146
|
+
puts "\033[32m获取LinkMap文件: #{link_map_file_name}成功,开始分析数据...\033[0m"
|
147
|
+
else
|
148
|
+
puts "\033[31m#{link_map_file_name}文件不存在,请重新输入文件 \033[0m"
|
149
|
+
exit
|
150
|
+
end
|
156
151
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
if last_file && temp_file_name.eql?(last_file.file_name)
|
163
|
-
last_file.file_serial_numers << obj.serial_number
|
164
|
-
else
|
165
|
-
sz_obj = SizeResult.new
|
166
|
-
sz_obj.file_name = temp_file_name
|
167
|
-
sz_obj.file_serial_numers << obj.serial_number
|
168
|
-
sizeResultArr << sz_obj
|
169
|
-
end
|
170
|
-
end
|
171
|
-
data_analyze_time = Time.now.to_i
|
172
|
-
puts "\033[32m数据分析完成,耗时#{data_analyze_time - start_time}秒。开始计算结果\033[0m"
|
152
|
+
link_map = LinkMap.new(link_map_file_name)
|
153
|
+
link_map.handle_map #处理文件为对象,然后继续后续操作
|
154
|
+
link_map.handle_l_sym_map #处理symbols为hashmap
|
155
|
+
sizeResultArr = []
|
173
156
|
|
174
|
-
|
175
|
-
|
176
|
-
sizeResultArr.each do |obj|
|
177
|
-
# 处理方法2
|
178
|
-
obj.file_serial_numers.each do |s_number|
|
179
|
-
begin
|
180
|
-
link_map.l_sym_map[s_number].each do |symb|
|
181
|
-
obj.size = obj.size + symb.s_size.hex
|
182
|
-
total_size = total_size +symb.s_size.hex #统计总大小
|
183
|
-
end
|
184
|
-
rescue => exception
|
185
|
-
end
|
186
|
-
end
|
187
|
-
# 处理方法1 太过耗时
|
188
|
-
# link_map.l_symbols.each do |symb|
|
189
|
-
# if obj.file_serial_numers.include?(symb.s_file_serial_number)
|
190
|
-
# obj.size = obj.size + symb.s_size.hex
|
191
|
-
# end
|
192
|
-
# end
|
193
|
-
# puts "正在计算#{obj.file_name}的大小..."
|
194
|
-
end
|
195
|
-
data_handle_time = Time.now.to_i #处理数据时间
|
196
|
-
puts "\033[32m数据处理完成,耗时#{data_handle_time - data_analyze_time}秒。开始对结果进行大小排序(从大到小)...\033[0m"
|
197
|
-
# 按照从大到小排序
|
198
|
-
sizeResultArr.sort_by!{|obj|[-obj.size]}
|
199
|
-
sort_handle_time = Time.now.to_i #排序耗时
|
200
|
-
puts "\033[32m数据排序完成,耗时#{sort_handle_time - data_handle_time}秒。开始输出结果:\033[0m"
|
201
|
-
puts "\033[32m--------------------------------\033[0m"
|
157
|
+
link_map.l_obj_files.each do |obj|
|
158
|
+
temp_file_name = obj.file_name.split("(")[0]
|
202
159
|
|
203
|
-
|
204
|
-
save_file_path = SizeResult.getSaveFileName(path_para)
|
205
|
-
if File.exist?(save_file_path)
|
206
|
-
File.delete(save_file_path)
|
207
|
-
end
|
160
|
+
last_file = sizeResultArr.last
|
208
161
|
|
209
|
-
|
210
|
-
|
211
|
-
# 打印结果
|
212
|
-
sizeResultArr.each do |obj|
|
213
|
-
puts "#{obj.file_name} " + SizeResult.handleSize(obj.size)
|
214
|
-
save_file.puts("#{obj.file_name} #{SizeResult.handleSize(obj.size)}")
|
215
|
-
end
|
216
|
-
save_file.puts("总大小为:#{SizeResult.handleSize(total_size)}")
|
217
|
-
save_file.close
|
218
|
-
puts "总大小为(仅供参考):#{SizeResult.handleSize(total_size)}"
|
219
|
-
puts "\033[32m--------------------------------\033[0m"
|
220
|
-
end_time = Time.now.to_i #程序执行结束时间
|
221
|
-
puts "分析结果已经保存为文件,位置为:\n\033[32m#{save_file_path}\033[0m"
|
222
|
-
puts " "
|
223
|
-
puts "\033[32m整个程序执行时间为:#{end_time - start_time}秒\033[0m"
|
224
|
-
end
|
225
|
-
|
226
|
-
end
|
227
|
-
# --------------------------------- Size utils class ---------------------------------
|
228
|
-
class SizeResult
|
229
|
-
attr_accessor :file_name, :file_serial_numers, :size
|
230
|
-
def initialize
|
231
|
-
@file_serial_numers = []
|
232
|
-
@size = 0
|
233
|
-
end
|
234
|
-
# size字符化
|
235
|
-
def self.handleSize(size)
|
236
|
-
if size > 1024 * 1024
|
237
|
-
return format("%.2f",(size.to_f/(1024*1024))) + "MB"
|
238
|
-
elsif size > 1024
|
239
|
-
return format("%.2f",(size.to_f/1024)) + "KB"
|
162
|
+
if last_file && temp_file_name.eql?(last_file.file_name)
|
163
|
+
last_file.file_serial_numers << obj.serial_number
|
240
164
|
else
|
241
|
-
|
165
|
+
sz_obj = SizeResult.new
|
166
|
+
sz_obj.file_name = temp_file_name
|
167
|
+
sz_obj.file_serial_numers << obj.serial_number
|
168
|
+
sizeResultArr << sz_obj
|
242
169
|
end
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
170
|
+
end
|
171
|
+
data_analyze_time = Time.now.to_i
|
172
|
+
puts "\033[32m数据分析完成,耗时#{data_analyze_time - start_time}秒。开始计算结果\033[0m"
|
173
|
+
|
174
|
+
# 计算赋值size,此处耗时较长
|
175
|
+
total_size = 0
|
176
|
+
sizeResultArr.each do |obj|
|
177
|
+
# 处理方法2
|
178
|
+
obj.file_serial_numers.each do |s_number|
|
179
|
+
begin
|
180
|
+
link_map.l_sym_map[s_number].each do |symb|
|
181
|
+
obj.size = obj.size + symb.s_size.hex
|
182
|
+
total_size = total_size +symb.s_size.hex #统计总大小
|
183
|
+
end
|
184
|
+
rescue => exception
|
185
|
+
end
|
186
|
+
end
|
187
|
+
# 处理方法1 太过耗时
|
188
|
+
# link_map.l_symbols.each do |symb|
|
189
|
+
# if obj.file_serial_numers.include?(symb.s_file_serial_number)
|
190
|
+
# obj.size = obj.size + symb.s_size.hex
|
191
|
+
# end
|
192
|
+
# end
|
193
|
+
# puts "正在计算#{obj.file_name}的大小..."
|
194
|
+
end
|
195
|
+
data_handle_time = Time.now.to_i #处理数据时间
|
196
|
+
puts "\033[32m数据处理完成,耗时#{data_handle_time - data_analyze_time}秒。开始对结果进行大小排序(从大到小)...\033[0m"
|
197
|
+
# 按照从大到小排序
|
198
|
+
sizeResultArr.sort_by!{|obj|[-obj.size]}
|
199
|
+
sort_handle_time = Time.now.to_i #排序耗时
|
200
|
+
puts "\033[32m数据排序完成,耗时#{sort_handle_time - data_handle_time}秒。开始输出结果:\033[0m"
|
201
|
+
puts "\033[32m--------------------------------\033[0m"
|
202
|
+
|
203
|
+
# 判断文件是否存在
|
204
|
+
save_file_path = SizeResult.getSaveFileName(path_para)
|
205
|
+
if File.exist?(save_file_path)
|
206
|
+
File.delete(save_file_path)
|
207
|
+
end
|
208
|
+
|
209
|
+
# 创建要保存数据的文件
|
210
|
+
save_file = File.new(save_file_path,"w+")
|
211
|
+
# 打印结果
|
212
|
+
sizeResultArr.each do |obj|
|
213
|
+
puts "#{obj.file_name} " + SizeResult.handleSize(obj.size)
|
214
|
+
save_file.puts("#{obj.file_name} #{SizeResult.handleSize(obj.size)}")
|
215
|
+
end
|
216
|
+
save_file.puts("总大小为:#{SizeResult.handleSize(total_size)}")
|
217
|
+
save_file.close
|
218
|
+
puts "总大小为(仅供参考):#{SizeResult.handleSize(total_size)}"
|
219
|
+
puts "\033[32m--------------------------------\033[0m"
|
220
|
+
end_time = Time.now.to_i #程序执行结束时间
|
221
|
+
puts "分析结果已经保存为文件,位置为:\n\033[32m#{save_file_path}\033[0m"
|
222
|
+
puts " "
|
223
|
+
puts "\033[32m整个程序执行时间为:#{end_time - start_time}秒\033[0m"
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
# --------------------------------- Size utils class ---------------------------------
|
228
|
+
class SizeResult
|
229
|
+
attr_accessor :file_name, :file_serial_numers, :size
|
230
|
+
def initialize
|
231
|
+
@file_serial_numers = []
|
232
|
+
@size = 0
|
233
|
+
end
|
234
|
+
# size字符化
|
235
|
+
def self.handleSize(size)
|
236
|
+
if size > 1024 * 1024
|
237
|
+
return format("%.2f",(size.to_f/(1024*1024))) + "MB"
|
238
|
+
elsif size > 1024
|
239
|
+
return format("%.2f",(size.to_f/1024)) + "KB"
|
240
|
+
else
|
241
|
+
return size.to_s + "B"
|
242
|
+
end
|
243
|
+
end
|
244
|
+
# 获取结果文件保存到目录
|
245
|
+
def self.getSaveFileName(path_para)
|
246
|
+
path = Pathname.new(path_para)
|
247
|
+
# 要保存的地址
|
248
|
+
save_file_path = path.dirname.to_s + "/" + "parse_" + path.basename.to_s + "_result.txt"
|
249
|
+
return save_file_path
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
data/lib/itools/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zhanggui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,26 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.17'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: spreadsheet
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.1.8
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '1.1'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.1.8
|
55
75
|
description: 'iOS dev tools '
|
56
76
|
email:
|
57
77
|
- scottzg@126.com
|
@@ -98,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
118
|
version: '0'
|
99
119
|
requirements: []
|
100
120
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.7.
|
121
|
+
rubygems_version: 2.7.8
|
102
122
|
signing_key:
|
103
123
|
specification_version: 4
|
104
124
|
summary: iOS tools
|