itools 0.1.4 → 0.1.5
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.lock +2 -2
- data/README.md +54 -8
- data/bin/itools +8 -0
- data/lib/itools.rb +1 -0
- data/lib/itools/find_unuse_img.rb +105 -0
- data/lib/itools/string_searcher.rb +129 -0
- data/lib/itools/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7dcec9f2f9c1c5f46bed45dcd31d97b87c3b8b7d5e4cfbde50b54a173277b29
|
4
|
+
data.tar.gz: 93450e0c03b424cc94910354407c090063e538e8f6c202bce7e153baebabd35e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 242950430add170c20e636ee10363b44117e94286f7e75f4593b9f10b2fbdea15c2189aa2c19c866fb7eb1ef91279dca8e3a946e70cf2e8ce18dff0476833e51
|
7
|
+
data.tar.gz: 0e42334a689c790919f9c4cd67a5040cfc3090602c35749fe76af930f3f016a7348f283596c12f4ad2717d0dff921ec809de46891b5d95adf3630446c09aa140
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
itools (0.1.
|
4
|
+
itools (0.1.5)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -20,7 +20,7 @@ DEPENDENCIES
|
|
20
20
|
gli (~> 2.17)
|
21
21
|
itools!
|
22
22
|
rake (~> 10.0)
|
23
|
-
spreadsheet (~> 1.1.8)
|
23
|
+
spreadsheet (~> 1.1, >= 1.1.8)
|
24
24
|
|
25
25
|
BUNDLED WITH
|
26
26
|
1.17.1
|
data/README.md
CHANGED
@@ -1,25 +1,44 @@
|
|
1
1
|
# itools
|
2
2
|
|
3
|
-
|
3
|
+
一个方便iOS开发的工具类。主要是使用Ruby编写,用于进行一些方便的处理,例如字符串查找,LinkMap解析等。
|
4
4
|
|
5
|
-
##
|
5
|
+
## 安装
|
6
6
|
|
7
7
|
|
8
8
|
```ruby
|
9
9
|
gem install itools
|
10
10
|
```
|
11
11
|
|
12
|
-
##
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
## 使用
|
13
|
+
安装之后再终端执行itools,结果如下:
|
14
|
+
```shell
|
15
|
+
NAME
|
16
|
+
itools - a collection of tools for ios developer
|
17
|
+
|
18
|
+
SYNOPSIS
|
19
|
+
itools [global options] command [command options] [arguments...]
|
20
|
+
|
21
|
+
VERSION
|
22
|
+
0.1.4
|
23
|
+
|
24
|
+
GLOBAL OPTIONS
|
25
|
+
--help - Show this message
|
26
|
+
--version - Display the program version
|
27
|
+
|
28
|
+
COMMANDS
|
29
|
+
help - Shows a list of commands or help for one command
|
30
|
+
parse - Analyze the memory footprint of each part or component in Xcode project
|
31
|
+
search - search str(or strs) in some file(or folder's file)
|
32
|
+
```
|
33
|
+
|
34
|
+
### 功能1:解析LinkMap
|
35
|
+
命令:
|
16
36
|
```shell
|
17
|
-
#link map file's name
|
18
37
|
itools parse LinkMapDemo-LinkMap-normal-arm64.txt
|
19
38
|
# or
|
20
39
|
itools parse /user/Desk/LinkMapDemo-LinkMap-normal-arm64.txt
|
21
40
|
```
|
22
|
-
|
41
|
+
解析结果实例:
|
23
42
|
```ruby
|
24
43
|
AppDelegate.o 8.50KB
|
25
44
|
ViewController.o 735B
|
@@ -32,6 +51,33 @@ UIKit.tbd 24B
|
|
32
51
|
Total Size:10.07KB
|
33
52
|
```
|
34
53
|
For more information, see:[https://www.cnblogs.com/zhanggui/p/9991455.html](https://www.cnblogs.com/zhanggui/p/9991455.html)
|
54
|
+
|
55
|
+
### 功能2:字符串查找
|
56
|
+
命令
|
57
|
+
```ruby
|
58
|
+
itools search folder/file str/strs
|
59
|
+
```
|
60
|
+
例如:
|
61
|
+
1.单字符查找:查找number.txt中包含7的行
|
62
|
+
```ruby
|
63
|
+
itools search number.txt 7
|
64
|
+
```
|
65
|
+
将会把number.txt中包含7的行输出,内容包括:文件名(这里是number.txt)、包含字符串(这里是7)、文件所在目录、查找内容所在行、查找结果。
|
66
|
+
2.多字符查找:查找number.txt中包含7,8的行
|
67
|
+
```ruby
|
68
|
+
itools search number.txt 7,8
|
69
|
+
```
|
70
|
+
将会把number.txt中包含7、8的行记录到excel表中,表内容和上面的展示一样。
|
71
|
+
3.在文件夹所有文件中查找某个字符串:
|
72
|
+
```ruby
|
73
|
+
itools search /Users/zhanggui/zhanggui/my-dev MAYGO
|
74
|
+
```
|
75
|
+
将会把/Users/zhanggui/zhanggui/my-dev文件夹中所有的文件进行遍历,然后找到包含MAYGO字符串的类,并生成excel文件。
|
76
|
+
4.在文件夹所有文件文件中查找某些字符串:
|
77
|
+
```ruby
|
78
|
+
itools search /Users/zhanggui/zhanggui/Ruby/ 3434,Scott
|
79
|
+
```
|
80
|
+
将会在/Users/zhanggui/zhanggui/Ruby/中查找所有包含3434和Scott的文件,并生成excel。
|
35
81
|
## Contributing
|
36
82
|
|
37
83
|
Bug reports and pull requests are welcome on GitHub at https://github.com/ScottZg/itools. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the
|
data/bin/itools
CHANGED
@@ -22,4 +22,12 @@ command :search do |c|
|
|
22
22
|
Itools::StringSearcher.search_result(args[0],args[1])
|
23
23
|
end
|
24
24
|
end
|
25
|
+
# 查找工程中没有用到的图片
|
26
|
+
desc "search unuse image"
|
27
|
+
arg 'xxx.txt'
|
28
|
+
command :find do |c|
|
29
|
+
c.action do |global_options, options, args|
|
30
|
+
Itools::ImgFinder.find(args[0])
|
31
|
+
end
|
32
|
+
end
|
25
33
|
exit run(ARGV)
|
data/lib/itools.rb
CHANGED
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'spreadsheet'
|
3
|
+
module Itools
|
4
|
+
class ImgFinder
|
5
|
+
attr_accessor :image_count, :image_names, :unuse_images,:find_path
|
6
|
+
attr_accessor :search_files
|
7
|
+
def initialize
|
8
|
+
@image_count = 0
|
9
|
+
@image_names = []
|
10
|
+
@search_files = []
|
11
|
+
end
|
12
|
+
# 得到所有图片名称字符
|
13
|
+
def get_img_name_strs
|
14
|
+
result_arr = []
|
15
|
+
@image_names.each {|item|
|
16
|
+
item_name = Image.get_image_name(File.basename(item, ".*"))
|
17
|
+
result_arr << item_name
|
18
|
+
}
|
19
|
+
return result_arr
|
20
|
+
end
|
21
|
+
# 查找
|
22
|
+
def self.find(temp_find_dir)
|
23
|
+
imgFinder = ImgFinder.new
|
24
|
+
imgFinder.find_path = temp_find_dir
|
25
|
+
# 第一步:找到该文件夹下所有的图片文件
|
26
|
+
Find.find(temp_find_dir) do |filename|
|
27
|
+
if File.file?(filename) #如果是文件,则从文件中查找,忽略文件夹
|
28
|
+
if Image.is_image_format(File.extname(filename))
|
29
|
+
# p File.basename(filename)
|
30
|
+
# exit
|
31
|
+
imgFinder.image_count = imgFinder.image_count + 1
|
32
|
+
imgFinder.image_names << filename
|
33
|
+
elsif File.extname(filename).eql?(".m")
|
34
|
+
imgFinder.search_files << filename
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
if imgFinder.image_names.size == 0
|
39
|
+
puts "\033[32m查找成功,未发现图片\033[0m"
|
40
|
+
return
|
41
|
+
else
|
42
|
+
puts "\033[32m查找成功,共发现图片#{imgFinder.image_names.size}张\033[0m"
|
43
|
+
end
|
44
|
+
# 第二步:找到图片是否使用
|
45
|
+
imags = imgFinder.get_img_name_strs.uniq #要查找的图片名称数组
|
46
|
+
|
47
|
+
puts "\033[32m需要查找的图片有#{imags.size}张\033[0m"
|
48
|
+
# imgFinder.search_files #要查找的文件
|
49
|
+
imgFinder.search_files.each {|file|
|
50
|
+
File.read(file).each_line do |line|
|
51
|
+
haveStr = StringHandle.containsStr(line,imags)
|
52
|
+
if haveStr != -1
|
53
|
+
puts "#{imags[haveStr]}在使用...,剩余查找项#{imags.size-1}个"
|
54
|
+
imags.delete_at(haveStr)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
}
|
58
|
+
puts "\033[32m无用图片#{imags.size}张,图片名称如下:\033[0m"
|
59
|
+
Spreadsheet.client_encoding = 'utf-8'
|
60
|
+
book = Spreadsheet::Workbook.new
|
61
|
+
sheet1 = book.create_worksheet
|
62
|
+
sheet1.row(0)[0] = "文件名"
|
63
|
+
imags.each_with_index {|item,idx|
|
64
|
+
sheet1.row(idx+1)[0] = item
|
65
|
+
puts item
|
66
|
+
}
|
67
|
+
book.write "#{imgFinder.find_path}/search_result.xls"
|
68
|
+
puts "\033[32m文件已经保存到#{imgFinder.find_path}/search_result.xls\033[0m"
|
69
|
+
puts "\033[32m内容仅供参考,具体还要自己通过结果查看一下\033[0m"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
# 字符串操作类
|
73
|
+
class StringHandle
|
74
|
+
# originStr中是否包含targetStrs中的内容
|
75
|
+
def self.containsStr(originStr,targetStrs)
|
76
|
+
targetStrs.each_with_index {|item,idx|
|
77
|
+
if originStr.include?(item)
|
78
|
+
return idx
|
79
|
+
end
|
80
|
+
}
|
81
|
+
return -1
|
82
|
+
end
|
83
|
+
end
|
84
|
+
class Image
|
85
|
+
|
86
|
+
# 是否是图片格式,这里只判断了jpg、png和gif
|
87
|
+
def self.is_image_format(temp_ext_name)
|
88
|
+
if ['.jpg','.png','.gif'].include?(temp_ext_name)
|
89
|
+
return true
|
90
|
+
else
|
91
|
+
return false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
def self.get_image_name(file)
|
95
|
+
return file.gsub(/@2x|@3x/,"")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
# class ObjectiveC
|
99
|
+
# def self.is_h_file(temp_ext_name)
|
100
|
+
# if ['.h']
|
101
|
+
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
# end
|
105
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'spreadsheet'
|
3
|
+
module Itools
|
4
|
+
# 字符串操作类
|
5
|
+
class StringHandle
|
6
|
+
# originStr中是否包含targetStrs中的内容
|
7
|
+
def self.containsStr(originStr,targetStrs)
|
8
|
+
targetStrs.each_with_index {|item,idx|
|
9
|
+
if originStr.include?(item)
|
10
|
+
return idx
|
11
|
+
end
|
12
|
+
}
|
13
|
+
return -1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
# 搜索结果类
|
17
|
+
class SearchResult
|
18
|
+
attr_accessor :file_name, :in_line, :result_str, :key_str
|
19
|
+
|
20
|
+
def initialize(tempName,tempInLine,tempResultStr,tempKeyStr)
|
21
|
+
@file_name = tempName
|
22
|
+
@in_line = tempInLine
|
23
|
+
@result_str = tempResultStr
|
24
|
+
@key_str = tempKeyStr
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Main class
|
29
|
+
class StringSearcher
|
30
|
+
attr_accessor :search_strs, :search_in, :result
|
31
|
+
def initialize(temp_SearchStrs,temp_SearchIn)
|
32
|
+
@search_strs = temp_SearchStrs
|
33
|
+
@search_in = temp_SearchIn
|
34
|
+
@result = []
|
35
|
+
end
|
36
|
+
# 第二步开始搜索
|
37
|
+
def search
|
38
|
+
if check_exist
|
39
|
+
handle_method = ''
|
40
|
+
if File.file?(@search_in) #如果是文件
|
41
|
+
handle_method = "search_in_file"
|
42
|
+
else
|
43
|
+
handle_method = "search_in_folder"
|
44
|
+
end
|
45
|
+
self.send(handle_method,@search_in)
|
46
|
+
else
|
47
|
+
puts "\033[31m文件不存在,请检查输入是否正确\033[0m"
|
48
|
+
exit
|
49
|
+
end
|
50
|
+
end
|
51
|
+
# 从文件查找
|
52
|
+
def search_in_file(temp_file)
|
53
|
+
line_index = 1
|
54
|
+
File.read(temp_file).each_line do |line|
|
55
|
+
haveIndex = StringHandle.containsStr(line,@search_strs)
|
56
|
+
if haveIndex != -1
|
57
|
+
search_result = SearchResult.new(temp_file,line_index,line,@search_strs[haveIndex])
|
58
|
+
@result << search_result
|
59
|
+
end
|
60
|
+
line_index = line_index + 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# 从文件夹查找
|
65
|
+
def search_in_folder(unuse)
|
66
|
+
puts @search_in_folder
|
67
|
+
Find.find(@search_in) do |filename|
|
68
|
+
if File.file?(filename) #如果是文件,则从文件中查找,忽略文件夹
|
69
|
+
search_in_file(filename)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
# 第一步:检查是否存在
|
74
|
+
def check_exist
|
75
|
+
if File.file?(@search_in)
|
76
|
+
puts "\033[32m从文件中查找\033[0m"
|
77
|
+
return true
|
78
|
+
elsif File::directory?(@search_in)
|
79
|
+
puts "\033[32m从文件夹中查找\033[0m"
|
80
|
+
return true
|
81
|
+
else
|
82
|
+
return false
|
83
|
+
end
|
84
|
+
end
|
85
|
+
# 第一个参数为要搜索的文件或者文件夹名称
|
86
|
+
# 第二个参数为要搜索的字符串
|
87
|
+
def self.search_result(temp_search_in,temp_search_strs)
|
88
|
+
if temp_search_in.nil?
|
89
|
+
puts "\033[31m传入的参数有误,第一个参数为要搜索的文件或者文件夹名称,第二个参数为要搜索的字符串(如要查找多个str使用英文,分割),两个参数中间用空格区分\033[0m"
|
90
|
+
exit
|
91
|
+
end
|
92
|
+
if temp_search_strs.nil?
|
93
|
+
puts "\033[31m传入的参数有误,第一个参数为要搜索的文件或者文件夹名称,第二个参数为要搜索的字符串(如要查找多个str使用英文,分割),两个参数中间用空格区分\033[0m"
|
94
|
+
exit
|
95
|
+
end
|
96
|
+
# 传入的可能是字符串数组
|
97
|
+
searcher = StringSearcher.new(temp_search_strs.split(","),temp_search_in)
|
98
|
+
searcher.search
|
99
|
+
if searcher.result.size == 0
|
100
|
+
puts "\033[32m没有找到相关字段\033[0m"
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
# 输出搜索的内容
|
104
|
+
Spreadsheet.client_encoding = 'utf-8'
|
105
|
+
book = Spreadsheet::Workbook.new
|
106
|
+
sheet1 = book.create_worksheet
|
107
|
+
sheet1.row(0)[0] = "文件名"
|
108
|
+
sheet1.row(0)[1] = "包含字符串"
|
109
|
+
sheet1.row(0)[2] = "文件所在目录"
|
110
|
+
sheet1.row(0)[3] = "查找内容所在行"
|
111
|
+
sheet1.row(0)[4] = "查找结果Str"
|
112
|
+
|
113
|
+
searcher.result.each_with_index do |item,i|
|
114
|
+
sheet1.row(i+1)[0] = File.basename(item.file_name)
|
115
|
+
sheet1.row(i+1)[1] = item.key_str
|
116
|
+
sheet1.row(i+1)[2] = File.dirname(item.file_name)
|
117
|
+
sheet1.row(i+1)[3] = item.in_line
|
118
|
+
sheet1.row(i+1)[4] = item.result_str
|
119
|
+
if i < 10
|
120
|
+
puts "#{item.key_str} is in file:#{File.basename(item.file_name)} and Inline:#{item.in_line}"
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
puts "\033[32m查找成功,内容已经保存到#{File.dirname(searcher.search_in)},请点击查看\033[0m"
|
126
|
+
book.write "#{File.dirname(searcher.search_in)}/search_result.xls"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/itools/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zhanggui
|
@@ -92,7 +92,9 @@ files:
|
|
92
92
|
- bin/itools
|
93
93
|
- itools.gemspec
|
94
94
|
- lib/itools.rb
|
95
|
+
- lib/itools/find_unuse_img.rb
|
95
96
|
- lib/itools/link_map.rb
|
97
|
+
- lib/itools/string_searcher.rb
|
96
98
|
- lib/itools/version.rb
|
97
99
|
homepage: https://github.com/ScottZg/itools
|
98
100
|
licenses:
|