itools 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|