Foxtable(狐表)用户栏目专家坐堂 → [求助]文档清理


  共有2450人关注过本帖树形打印复制链接

主题:[求助]文档清理

帅哥哟,离线,有人找我吗?
天一生水
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
[求助]文档清理  发帖心情 Post By:2021/6/24 16:32:00 [只看该作者]

蓝老师好!

我想清理系统导出的代码文档,达到软著登记的代码要求,清理后最终文档为纯代码,即不包括空行、纯注释行、代码后面的注释、标注行(如文档中 事件名称、控件名称等红、蓝色字符的段落等)。

下面的代码可以清理空行和以单引号开头的注释行,其他的不会写,麻烦蓝老师给写一下代码。

谢谢!

 

Dim dlg As new OpenFileDialog
dlg.Filter = "word|*.doc;*.docx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open(dlg.FileName)

        For Each k As object In doc.Paragraphs
            If Len(Trim(k.Range.text)) = 1 Then k.Range.Delete    '删除空行
            If Trim(k.Range.text).StartsWith(chr(39)) Then k.Range.Delete       '删除段落的开头字符是单引号

        Next

        doc.save
        app.quit
       
    catch ex As exception
        msgbox(ex.message)
        app.quit
    End try
End If

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看

 
 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:000.zip


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/24 16:46:00 [只看该作者]

我也搞不定,手工处理一下吧

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/6/24 20:31:00 [只看该作者]

手工可以处理带颜色的字符:
选择一处带颜色的字符串-鼠标右键菜单-格式-选择格式相似的文本,del键删除。


图片点击可在新窗口打开查看此主题相关图片如下:gif.gif
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/6/24 20:31:00 [只看该作者]

蓝老师,我增加了一段代码,是行的前部分为代吗,后半部分为以单引号开头的注释,但是删除时没有删到右边最后字符,麻烦老师给看看怎样修改?


Dim dlg As new OpenFileDialog
dlg.Filter = "word|*.doc;*.docx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open(dlg.FileName)
        
        For Each k As object In doc.Paragraphs
            If Len(Trim(k.Range.text)) = 1 Then k.Range.Delete    '删除空行
            If Trim(k.Range.text).StartsWith(chr(39)) Then k.Range.Delete       '删除段落的开头字符是单引号
            
            Dim rgx As New RegularExpressions.Regex("[\s][\p{P}][\u4e00-\u9fa5]")     '空格+单个标点(单引号)+中文字符
           k.Range.text =rgx.Replace(k.Range.text,""))
            
        Next
        
        doc.save
        app.quit
        
    catch ex As exception
        msgbox(ex.message)
        app.quit
    End try
End If

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/24 20:45:00 [只看该作者]

试试Dim rgx As New RegularExpressions.Regex("[\s][\p{P}][\u4e00-\u9fa5]$")

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/6/24 20:48:00 [只看该作者]

这样行

Dim tx As String = "System.Diagnostics.Process.GetCurrentProcess().Kill   '退出进程,你好"
Dim rgx As New RegularExpressions.Regex("[\s][\p{P}][\u4e00-\u9fa5].*")     '空格+单个标点+中文字符
Output.show(rgx.Replace(tx,""))

[此贴子已经被作者于2021/6/24 21:01:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/6/25 8:12:00 [只看该作者]

蓝老师好!

我试了一下这样写就可以:'[\u4e00-\u9fa5].*

但是这个表达式怎样写到这里面:Dim rgx As New RegularExpressions.Regex("           ") 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (1).jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/25 8:41:00 [只看该作者]

Dim rgx As New RegularExpressions.Regex("'[\u4e00-\u9fa5].*") 

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1137 积分:11224 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2021/6/25 15:10:00 [只看该作者]

蓝老师,加黑代码还有一点小问题:删除注释时会把换行符删除,请看图,怎样不删掉换行符?

代码如下:

Dim rgx As New RegularExpressions.Regex("'[\u4e00-\u9fa5].*")
Dim dlg As new OpenFileDialog
dlg.Filter = "word|*.doc;*.docx"
If dlg.ShowDialog = DialogResult.OK Then
    Dim app As New MSWord.Application
    try
        Dim doc = app.Documents.Open(dlg.FileName)
       
        For Each k As object In doc.Paragraphs
            If Len(Trim(k.Range.text)) = 1 Then
                k.Range.Delete    '删除空行
            ElseIf Trim(k.Range.text).StartsWith(chr(39)) Then
                k.Range.Delete       '删除段落的开头字符是单引号
            ElseIf rgx.IsMatch(k.Range.text) = True Then
                k.Range.text = rgx.Replace(k.Range.text,"")
            End If
        Next
       
        doc.save
        app.quit
       
    catch ex As exception
        msgbox(ex.message)
        app.quit
    End try
End If
msgbox("OK")

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2021/6/25 15:26:50编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107035 积分:544406 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/6/25 15:32:00 [只看该作者]

试试
Dim rgx As New RegularExpressions.Regex("(?s)'[\u4e00-\u9fa5].*")

 回到顶部