以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]文档清理  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=169656)

--  作者:天一生水
--  发布时间: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


--  作者:有点蓝
--  发布时间:2021/6/24 16:46:00
--  
我也搞不定,手工处理一下吧
--  作者:天一生水
--  发布时间:2021/6/24 20:31:00
--  
手工可以处理带颜色的字符:
选择一处带颜色的字符串-鼠标右键菜单-格式-选择格式相似的文本,del键删除。


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


--  作者:天一生水
--  发布时间: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

--  作者:有点蓝
--  发布时间:2021/6/24 20:45:00
--  
试试Dim rgx As New RegularExpressions.Regex("[\\s][\\p{P}][\\u4e00-\\u9fa5]$")
--  作者:天一生水
--  发布时间: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编辑过]

--  作者:天一生水
--  发布时间:2021/6/25 8:12:00
--  

蓝老师好!

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

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

 

 


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

--  作者:有点蓝
--  发布时间:2021/6/25 8:41:00
--  
Dim rgx As New RegularExpressions.Regex("\'[\\u4e00-\\u9fa5].*") 
--  作者:天一生水
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2021/6/25 15:32:00
--  
试试
Dim rgx As New RegularExpressions.Regex("(?s)\'[\\u4e00-\\u9fa5].*")