Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
2a0d78fd
Commit
2a0d78fd
authored
5 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加tab替换工具
parent
21d31b88
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
125 行增加
和
0 行删除
+125
-0
tests/tab.cpp
+125
-0
没有找到文件。
tests/tab.cpp
0 → 100644
查看文件 @
2a0d78fd
#
include
<
stdlib
.
h
>
#include <memory.h>
#if !defined(_WIN32)
#include <dirent.h>
#endif //!defined(_WIN32)
#include <set>
#include "Util/CMD.h"
#include "Util/util.h"
#include "Util/logger.h"
#include "Util/File.h"
#include "Util/uv_errno.h"
using
namespace
std
;
using
namespace
toolkit
;
class
CMD_main
:
public
CMD
{
public
:
CMD_main
()
{
_parser
.
reset
(
new
OptionParser
(
nullptr
));
(
*
_parser
)
<<
Option
(
'f'
,
/*该选项简称,如果是\x00则说明无简称*/
"filter"
,
/*该选项全称,每个选项必须有全称;不得为null或空字符串*/
Option
::
ArgRequired
,
/*该选项后面必须跟值*/
"c,cpp,cxx,c,h,hpp"
,
/*该选项默认值*/
true
,
/*该选项是否必须赋值,如果没有默认值且为ArgRequired时用户必须提供该参数否则将抛异常*/
"文件后缀过滤器"
,
/*该选项说明文字*/
nullptr
);
(
*
_parser
)
<<
Option
(
'i'
,
/*该选项简称,如果是\x00则说明无简称*/
"in"
,
/*该选项全称,每个选项必须有全称;不得为null或空字符串*/
Option
::
ArgRequired
,
/*该选项后面必须跟值*/
nullptr
,
/*该选项默认值*/
true
,
/*该选项是否必须赋值,如果没有默认值且为ArgRequired时用户必须提供该参数否则将抛异常*/
"文件夹或文件"
,
/*该选项说明文字*/
nullptr
);
}
virtual
~
CMD_main
()
{}
};
void
process_file
(
const
char
*
file
)
{
auto
str
=
File
::
loadFile
(
file
);
if
(
str
.
empty
())
{
return
;
}
auto
lines
=
split
(
str
,
"
\n
"
);
deque
<
string
>
lines_copy
;
for
(
auto
&
line
:
lines
)
{
string
line_copy
;
bool
flag
=
false
;
for
(
auto
&
ch
:
line
)
{
switch
(
ch
)
{
case
'\t'
:
line_copy
.
append
(
" "
);
break
;
case
' '
:
line_copy
.
push_back
(
ch
);
break
;
default:
line_copy
.
push_back
(
ch
);
flag
=
true
;
break
;
}
if
(
flag
)
{
break
;
}
}
lines_copy
.
push_back
(
line_copy
);
}
str
.
clear
();
for
(
auto
&
line
:
lines_copy
)
{
str
.
append
(
line
);
str
.
push_back
(
'\n'
);
}
File
::
saveFile
(
str
,
file
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
CMD_main
cmd_main
;
try
{
cmd_main
.
operator
()(
argc
,
argv
);
}
catch
(
std
::
exception
&
ex
)
{
cout
<<
ex
.
what
()
<<
endl
;
return
-
1
;
}
bool
rm_bom
=
cmd_main
.
hasKey
(
"rm"
);
string
path
=
cmd_main
[
"in"
];
string
filter
=
cmd_main
[
"filter"
];
auto
vec
=
split
(
filter
,
","
);
set
<
string
>
filter_set
;
for
(
auto
ext
:
vec
)
{
filter_set
.
emplace
(
ext
);
}
bool
no_filter
=
filter_set
.
find
(
"*"
)
!=
filter_set
.
end
();
//设置日志
Logger
::
Instance
().
add
(
std
::
make_shared
<
ConsoleChannel
>
());
File
::
scanDir
(
path
,
[
&
](
const
string
&
path
,
bool
isDir
)
{
if
(
isDir
)
{
return
true
;
}
if
(
!
no_filter
)
{
//开启了过滤器
auto
pos
=
strstr
(
path
.
data
(),
"."
);
if
(
pos
==
nullptr
)
{
//没有后缀
return
true
;
}
auto
ext
=
pos
+
1
;
if
(
filter_set
.
find
(
ext
)
==
filter_set
.
end
())
{
//后缀不匹配
return
true
;
}
}
//该文件匹配
process_file
(
path
.
data
());
return
true
;
},
true
);
return
0
;
}
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论