二、实现思路:
注意到代码注释的文本的特点是开头为“//”,考虑到可以使用通配符来进行文本描述从而实现替换。
而空行的特点是由连续的两个换行符组成,可以通过将连续的两个换行符替换为单个换行符实现空行的删除。
三、实现步骤:
1、删除注释:
(1)使用ctrl+a快捷键全选内容,然后通过ctrl+h快捷键弹出替换设置界面:
(2)点击“更多”,勾选使用“通配符”
(3)在查找内容中输入://*^13
在替换为中输入:^13
(4)点击“全部替换”(最好多点击几次),即可发现,所有的注释行都变为了空行,如下图:、
(5)若是region形式的注释,可参考:
( #region*^13) 替换成 ^13
( #endregion^13) 替换成 ^13
2、删除空行:
需要分两步进行,前段部分操作与删除注释相同,全选并弹出替换窗口,勾选使用通配符,使用以下两步替换:
(1)^13[ ]@^13 替换成 ^13^13
(2)^13^13 替换成 ^13
每一步要多点击几次“全部替换”,即可实现空行的删除,如下图:
一、需求: 现从编程软件中粘贴了一堆代码至word文档中,内容有百页之多,如下图: 现在想要对代码内容进行缩减,需要进行以下操作: (1)删掉注释。 (2)删除空行。二、实现思路: 注意到代码注释的文本的特点是开头为“//”,考虑到可以使用通配符来进行文本描述从而实现替换。 而空行的特点是由连续的两个换...
利用宏
代码
快速
删除
Word
文档中的这些
空行
。按下“Alt+F11”组合键打开Microsoft Visual Basic编辑器窗口,依次执行“插入→模块”,在右侧窗格中插入一个空白模块,手工输入如下
代码
:
Sub
删除
表格
空行
()Dim aTable As Table, aRow As RowApplication.ScreenUpdating = FalseFor Each aTable In...
需求说明:好多软件配置文件中会有许多以#开头的
注释
说明内容和
空行
,需求是在查看文件的时候不显示这些内容。1:使用cat方式命令格式:cat文件路径|grep-v"^#"|grep-v"^$"
举例:cat/etc/ssh/sshd_config|grep-v"^#"|grep-v"^$"2.使用sed方式命令格式:sed-e'/^#...
<br /> <br />1.
注释
使用的是以 //开始,所以我先把//替换成AAAA或别的什么字符<br />2.现在
删除
以AAAA开头的所有行:<br /><br />
使用UltraEdit 的regular expression替换选项,<br />查找%[ ^t]++AAA*^r 把它替换为空, 这个替换法在
注释
行前面可以有空格或制表符<br /><br />
如果用这个%AAA*^P
注释
行前面不能有空格。在UltraEdit的help里,%的正则表达式意思为行的开始<br /> <br
一、首先下一个支持正则表达式的编辑器,如notepad++
二、用编辑器打开程序,按Ctrl + F,查找替换,选中下图的红框中的Regular expression,在Findwhat中输入正则表达式,然后点击ReplaceAll即可。
三、正则表达式:1、/\*(.|[\r\n])*?\*/ 2、\/\/[^\n]* 3、^[\s]*\n
注释
:1、这个是查找/*与*/这样的
注释
的,全部替换为空;
2、这个是查找//这样的
注释
,全部替换为...
emeditor 破解版以运行轻巧、敏捷而又功能强大、丰富著称,作为简单好用的
文本
编辑器,EmEditor 支持多种配置,可自定义颜色、字体、工具栏、快捷键、行距等,支持
文本
列块选择、无限撤消/重做等,是替代记事本的最佳编辑器。
我最近一直在用 EmEditor,其便携性很适合影子系统,标签窗口也是极方便操作,现提供 EmEditor 12.0.4官方简体中文便携版,分别为 EmEditor 32 位和 64 位版。EmEditor 现已经添加了官方简体中文和繁体中文支持,无需额外汉化。
使用说明:
解压后直接运行主程序 EmEditor.exe 即可,所有配置都保存在 ini 文件中,纯绿色便携,完全兼容 Windows 7 及 PortableapPS.com 的便携平台,如果无法显示简体中文,可能需要重新配置。
2013/3/16 更新版本为 EmEditor 12.0.11 官方简体中文便携版,分别为 EmEditor 32 位和 64 位版。EmEditor 现已经添加了官方简体中文和繁体中文支持,无需额外汉化。
emeditor 破解版配置教程:
下面就让我们一起来通过图形化界面配置适合自己的EmEditor编辑器。
1、众多的图形界面配置功能
通过查看EmEditor的安装目录,可以发现,EmEditor有几个配置文件,理论上应该可以通过修改配置文件来达到配置EmEditor的目 的。然而,打开配置文件一看,如果您用过Vim,配置过Vim的话,会发现EmEditor的配置文件没法看。既然这样,那我们自然就会使用图形画界面来 配置了。
启动EmEditor,点击菜单栏上的工具菜单,该菜单下的几个子菜单就是配置用的。先来预览一下自定义和配置对话框。
通过配置对话框上的标签,您应该大概知道EmEditor的配置项有多少了吧,也应该相信EmEditor是很强大的,而且可以很有“个性”。
首先,来自定义EmEditor,相当于定义一个编辑环境。
2、自定义对话框
在自定义对话框中,很多定义采用默认即可。在此大概说一些polaris修改的几个地方。
1)在文件选项卡选中记住最后打开的文件夹。这样一定程度上方便了后续操作。
2)历史选项卡中可以记录最近打开文件记录,同时记录最近使用的字体。这样,在换字体时,只需要执行:查看菜单,就会有几个最近使用的字体。
3)查看:可以配置其他分栏的外观,如:资源管理器、大纲、输出窗口等;另外可以配置光标大小和颜色。
4)窗口:当时学Vim的时候,有一个很好的功能:保存当前工作环境,以便下次可以继续当前的工作。窗口就是用于配置这样类似的功能,不过似乎只能保存一个工作环境,没有Vim那么强大。
5)鼠标:配置鼠标按键执行的操作(主要是鼠标中建)。
6)状态栏:建议将所有选项勾选,在状态栏可以看到很多东西。
7)快捷方式:有一个很强大的功能,就是选中“在任务栏显示托盘符”,这样在任务栏可以方便的进行各种操作(通过自定义托盘图标)。
其他的选项您可以自己尝试。
3、打造共性
前面已经知道,EmEditor有一个“所有配置属性”。对,它是用于配置所有文件格式共同的属性。下面介绍常用配置。
3.1 常规选项卡
这是EmEditor最基本的一些配置。在这个选项卡中,一般建议勾选上显示标尺与行号,这是因为人们都习惯了编程(或阅读
代码
)时看到行号,这会 很方便定位,当然如果你不是程序员,可以不勾选。注意,这里勾选上,即使有些文件类型不想显示也没关系,别忘了EmEditor有“个性”化功能。
在这个选项卡有一个重要的配置项,那就是“制表符/缩进”,该对话框如下:
这里建议勾选上自动缩进和使用正则表达式,正则表达式的作用主要是为了编程缩进,以后再涉及。然后就是制表符大小和缩进大小,一般都会设置成4。
3.2 滚动选项卡
这里主要用于设置屏幕移动,根据你的习惯或爱好配置即可。有两个地方提一下:
1)“总是启用一页垂直滚动”。在使用编辑器的过程中,您肯定遇到过这种情况:编辑到了文件末尾,看着不方便,然后你就会按很多次回车来产生很多空 行,以使编辑行在中间。EmEditor提供了很好的解决方案,只需要勾选上“总是启用一页垂直滚动”,EmEditor便一直有一空页,让你的编辑总是 在上面或中间,而且没有产生多余的
空行
。
2)“水平格线”。选中后看起来像这样:
如果您喜欢可以勾选上。
3.3 文件选项卡
主要配置文件新建、编辑、保存时得一些信息,涉及文件编码等。一般采用默认即可。
3.4 备份、自动保存和关联选项卡
从标签名很容易知道功能。polaris备份功能一般不用(不喜欢它产生临时文件。呵呵。不过似乎不备
function IsUpper(ch: char): boolean;
function IsLower(ch: char): boolean;
function ToUpper(ch: char): char;
function ToLower(ch: char): char;
public
procedure ReplaceSelText(Edit: TCustomEdit; const s: String);
procedure UpperSelText(Edit: TCustomEdit);
procedure LowerSelText(Edit: TCustomEdit);
function UpperFistLetter(Memo: TMemo): string;
procedure ClearBlankLine(Memo: TMemo);
procedure ClearBlankSpace(Memo: TMemo);
procedure ClearNum(Memo: TMemo);
procedure ClearLetter(Memo: TMemo);
procedure InsertNumber(Memo: TMemo);
procedure InsertComment(Memo: TMemo);
procedure BatchReplaceString(Memo: TMemo);
procedure JustOneLine(Memo: TMemo);
procedure ReLine(Memo: TMemo; n: Integer);
procedure TextToHtml(sTextFile, sHtmlFile: string);
function Proper(const s: string): string;
function CN
Word
sCount(text: string): Integer;
function EN
Word
sCount(text: string): Integer;
StrFunction: TStringFunction;
implementation
// 让
代码
设置Memo后可以让memo在Ctrl+Z撤销有效
procedure TStringFunction.ReplaceSelText(Edit: TCustomEdit; const s: String);
begin
SendMessage(Edit.Handle, EM_REPLACESEL, 1, LPARAM(PChar(s)));
// Edit.Perform(EM_REPLACESEL, 1, LPARAM(PChar(s)));
// Edit显示行号
// ------------------------------------------------------------------------------
// 去除
空行
// Memo1.Text := StringReplace(Memo1.Text, #13#10#13#10, #13#10, [rfReplaceAll]);
//无法撤销
//
空行
的去掉
//本行只有空格的也去掉
//复制到剪切板上
procedure TStringFunction.ClearBlankLine(Memo: TMemo);
i: Integer;
list: TStringList;
begin
with Memo do
begin
if Lines.Count > 0 then
begin
list := TStringList.Create;
for i := 0 to Lines.Count - 1 do
if (Trim(Lines[i]) <> '') then
list.Add(Lines[i]);
SelectAll;
ReplaceSelText(Memo, list.text);
list.Free;
// 去除空格
// 将 空格替换为空
procedure TStringFunction.ClearBlankSpace(Memo: TMemo);
s: string;
begin
s := StringReplace(Memo.Lines.text, ' ', '', [rfReplaceAll]);
Memo.SelectAll;
ReplaceSelText(Memo, s);
// 去除一字符串中的所有的数字
procedure TStringFunction.ClearNum(Memo: TMemo);
str: string;
i: Integer;
begin
str := '1234567890';
for i := 0 to Length(str) do
Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]);
{ rfReplaceAll
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
// 去除一字符串中的所有的字母
procedure TStringFunction.ClearLetter(Memo: TMemo);
str: string;
i: Integer;
begin
str := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for i := 0 to Length(str) do
Memo.text := StringReplace(Memo.Lines.text, str[i], '', [rfReplaceAll]);
// 批量替换关键字
procedure TStringFunction.BatchReplaceString(Memo: TMemo);
i: Integer;
begin
for i := 0 to Length(Memo.Lines.text) do
Memo.text := StringReplace(Memo.Lines.text, Memo.Lines[i], '',
[rfReplaceAll]);
ClearBlankSpace(Memo);
// ------------------------------------------------------------------------------
// 全角转半角
// 符号有哪些
procedure ConvertQtoB;
begin
// 半角转换全角
procedure ConvertBtoQ;
begin
{ 转换选中的
文本
大写 }
procedure TStringFunction.UpperSelText(Edit: TCustomEdit);
x, y: Integer;
begin
With Edit do
begin
x := SelStart;
y := SelLength;
if SelText <> '' then
begin
ReplaceSelText(Edit, UpperCase(SelText));
SelStart := x;
SelLength := y;
begin
Edit.SelectAll;
ReplaceSelText(Edit, UpperCase(Edit.text));
{ 转换选中的
文本
小写 }
procedure TStringFunction.LowerSelText(Edit: TCustomEdit);
x, y: Integer;
begin
With Edit do
begin
x := SelStart;
y := SelLength;
if SelText <> '' then
begin
ReplaceSelText(Edit, LowerCase(SelText));
SelStart := x;
SelLength := y;
begin
Edit.SelectAll;
ReplaceSelText(Edit, LowerCase(Edit.text));
{ 判断字符是否是大写字符 }
function TStringFunction.IsUpper(ch: char): boolean;
begin
Result := ch in ['A' .. 'Z'];
{ 判断字符是否是小写字符 }
function TStringFunction.IsLower(ch: char): boolean;
begin
Result := ch in ['a' .. 'z'];
{ 转换为大写字符 }
function TStringFunction.ToUpper(ch: char): char;
begin
Result := chr(ord(ch) and $DF);
{ 转换为小写字符 }
function TStringFunction.ToLower(ch: char): char;
begin
Result := chr(ord(ch) or $20);
{ Capitalizes First Letter Of Every
Word
In S 单语首字母大写 }
function TStringFunction.Proper(const s: string): string;
i: Integer;
CapitalizeNextLetter: boolean;
begin
Result := LowerCase(s);
CapitalizeNextLetter := True;
for i := 1 to Length(Result) do
begin
if CapitalizeNextLetter and IsLower(Result[i]) then
Result[i] := ToUpper(Result[i]);
CapitalizeNextLetter := Result[i] = ' ';
{ Memo选中的首字母大写 }
function TStringFunction.UpperFistLetter(Memo: TMemo): string;
i, j: Integer;
begin
with Memo do
begin
i := SelStart;
j := SelLength;
// SelText := Proper(SelText);
ReplaceSelText(Memo, Proper(SelText));
SelStart := i;
SelLength := j;
// ------------------------------------------------------------------------------
procedure TStringFunction.InsertNumber(Memo: TMemo);
i: Integer;
str: String;
begin
for i := 0 to Memo.Lines.Count do
begin
str := Format('%.4d. %s', [i, Memo.Lines[i]]);
Memo.Lines[i] := str;
Application.ProcessMessages;
//
注释
和取消
注释
// 获得选中的
文本
的起始行和结束行
procedure TStringFunction.InsertComment(Memo: TMemo);
str: string;
x, y: Integer;
begin
str := Memo.SelText;
x := Memo.SelStart;
y := Memo.SelLength;
if str = '' then
Exit;
// Memo.SetSelText('//' +str);
Memo.SelText := '//' + str;
Memo.SelStart := x + 2;
Memo.SelLength := y + 2;
// ------------------------------------------------------------------------------
// 合并成一行
procedure TStringFunction.JustOneLine(Memo: TMemo);
s: string;
i: Integer;
begin
for i := 0 to Memo.Lines.Count - 1 do
s := s + Memo.Lines[i];
Memo.SelectAll;
ReplaceSelText(Memo, s);
// ------------------------------------------------------------------------------
// 重新分行
n: Integer;
begin
n := StrToInt(InputBox('重新分行', '每行几个字符', '8'));
ReLine(Memo1, n);
procedure TStringFunction.ReLine(Memo: TMemo; n: Integer);
s: string;
i, j, k: Integer;
L: TStringList;
begin
L := TStringList.Create;
j := 1;
for k := 0 to Memo.Lines.Count - 1 do
s := s + Memo.Lines[k];
if Trim(s) <> '' then
begin
for i := 0 to (Length(s) div n) do // 几行
begin
j := j + n;
L.Add(Copy(s, j - n, n)); // COPY 的第一位不是0是1 // 每行的字符
Memo.SelectAll;
ReplaceSelText(Memo, L.text);
L.Free;
// ------------------------------------------------------------------------------
// 获得汉字字符个数
function TStringFunction.CN
Word
sCount(text: string): Integer;
i, sum, c: Integer;
begin
Result := 0;
c := 0;
sum := Length(text);
if sum = 0 then
Exit;
for i := 0 to sum do
begin
if ord(text[i]) >= 127 then
begin
Inc(c);
Result := c;
// 获得非汉字字符个数
function TStringFunction.EN
Word
sCount(text: string): Integer;
i, sum, e: Integer;
begin
Result := 0;
e := 0;
sum := Length(text);
if sum = 0 then
Exit;
for i := 0 to sum do
begin
if (ord(text[i]) >= 33) and (ord(text[i]) <= 126) then
begin
Inc(e);
Result := e;
TextToHtml('C:\1.txt','c:\2.htm');
procedure TStringFunction.TextToHtml(sTextFile, sHtmlFile: string);
aText: TStringList;
aHtml: TStringList;
i: Integer;
begin
aText := TStringList.Create;
aText.LoadFromFile(sTextFile);
aHtml := TStringList.Create;
aHtml.Clear;
aHtml.Add('<html>');
aHtml.Add('<body>');
for i := 0 to aText.Count - 1 do
aHtml.Add(aText.Strings[i] + '<br>');
aHtml.Add('</body>');
aHtml.Add('</html>');
aHtml.SaveToFile(sHtmlFile);
finally
aHtml.Free;
finally
aText.Free;
Initialization
StrFunction := TStringFunction.Create;
Finalization
StrFunction.Free;
这个命令会在当前目录下查找所有的.py文件,将它们的内容合并起来,并使用sed命令去除
注释
和
空行
,最后使用wc命令统计行数并输出。如果需要在Python中调用这个命令并返回结果,可以使用以下
代码
:
```python
import subprocess
result = subprocess.check_output(['find', '.', '-name', '*.py', '|', 'xargs', 'cat', '|', 'sed', '/^\\s*#/d;/^\\s*$/d', '|', 'wc', '-l'])
print(result.decode('utf-8'))
这个
代码
使用subprocess模块调用命令行,并将结果以字符串形式返回。注意,这个
代码
并没有对命令行的输出进行
处理
,因此输出结果可能包含一些不必要的空格或换行符。