前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速提取文档中的java,c代码

快速提取文档中的java,c代码

作者头像
Blank.
发布2023-04-27 19:53:55
6820
发布2023-04-27 19:53:55
举报
文章被收录于专栏:BlankBlank

快速提取文档中的java,c代码,自动过滤头文件

演示文稿:
图片[1]-快速提取文档中的java,c代码-小Q博客
图片[1]-快速提取文档中的java,c代码-小Q博客

网页版:

体验地址:https://iu00.cn/info/extract.php

图片[2]-快速提取文档中的java,c代码-小Q博客
图片[2]-快速提取文档中的java,c代码-小Q博客
网页代码:
代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
	<title>Java,c代码提取工具</title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css">
	<style>
		.container {
			max-width: 600px;
			margin: 0 auto;
		}
		.form-group label {
			font-size: 1.2rem;
			font-weight: bold;
		}
		.form-group textarea {
			font-family: monospace;
		}
		.result {
			font-family: monospace;
			margin-top: 1rem;
		}
	</style>
	<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
	<div class="container">
		<br>
		<h2>Java,c代码提取工具</h2>
		<p>待转换的代码:<p>
		<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" enctype="multipart/form-data">
			<div class="form-group">
				<textarea class="form-control" rows="7" id="code" name="code"><?php if ($_SERVER["REQUEST_METHOD"] == "POST") {echo $_POST['code'];} ?></textarea>
			</div>
			<br>
			<button type="submit" class="btn btn-primary">提取</button>
			<button type="button" class="btn btn-primary" onclick="copyText()">复制</button>
			<button type="button" class="btn btn-primary" onclick="clearText()">清空</button>
		</form>
		<div class="result">
			<?php
			if ($_SERVER["REQUEST_METHOD"] == "POST") {
				$code = $_POST['code'];
				$text = extract_java_code($code);
				echo "<br><h3>提取结果:</h3>";
				echo '<textarea class="form-control" rows="10" id="result">'.$text.'</textarea>';
			}
			?>
		</div>
	</div>

</body>
</html>



<script>
function copyText() {
    const copyText = document.querySelector("#result");
    copyText.select();
    document.execCommand("copy");
    alert("已复制到剪贴板!");
}
</script>

<script>
function clearText() {
    $('#code').val('');
    $('#result').val('');
}
</script>


<?php
function extract_java_code($r) {

    $lines = explode("\n", $r);  // 将文本分割成行
    $new_lines = [];  // 存放处理后的行
    $imports = [];  // 存放已经出现的import语句,避免重复出现
    
    foreach ($lines as $line) {
        
        // 过滤开头第一个空格
        $line=substr($line, 1);
        
        // 过滤开头数字
        $line=preg_replace('/^\d+\s*/', '', $line);

        // 处理import语句,将其放在第一行
        if (strpos($line, 'import ') !== false ) {
            if (!in_array($line, $imports)) {
                array_unshift($new_lines, $line);
                $imports[] = $line;
            }
        }

        // 保留所有带;}的行
        elseif (strpos($line, ';') !== false || strpos($line, '{') !== false || strpos($line, '}') !== false ) {
            $new_lines[] = $line;
        }
        
        
        // 保留所有带();的行
        elseif (strpos($line, '(') !== false || strpos($line, ')') !== false and strpos($line, ';') !== false ) {
            $new_lines[] = $line;
        }
        
        // 保留所有带if或者elseif的行
        elseif (strpos($line, 'if') !== false and strpos($line, '(') !== false and strpos($line, ')') !== false ) {
            $new_lines[] = $line;
        }
        // 保留所有带else的行
        elseif (strpos($line, 'else') !== false) {
            $new_lines[] = $line;
        }
    
        // 保留注释
        elseif (strpos($line, '//') !== false) {
            $new_lines[] = $line;
        }

    }
    $copyText = implode("\n", $new_lines);
    return $copyText;  // 将处理后的行合并成文本返回
}

Python版:

只是将代码提取出来了,还是需要自己完善一下的,仅支持word文档,仅支持java语言

图片[3]-快速提取文档中的java,c代码-小Q博客
图片[3]-快速提取文档中的java,c代码-小Q博客
代码和程序

程序下载:https://wwkm.lanzouf.com/iU6Kk0twjn1a

(解压后找到Main.exe运行即可)

程序代码:

(py写的比较复杂,而且可能问题会比较多,不支持c,懒得改了)

代码语言:javascript
复制
import PySimpleGUI as sg
import docx2txt
import pyperclip

copyText = ''


def extract_java_code(r):
    lines = r.split('\n')  # 将文本分割成行
    new_lines = []  # 存放处理后的行
    imports = set()  # 存放已经出现的import语句,避免重复出现
    for line in lines:
        # 处理注释行
        if line.strip().startswith('//'):
            new_lines.append(line)
        # 处理import语句,将其放在第一行
        elif line.strip().startswith('import'):
            if line not in imports:
                new_lines.insert(0, line)
                imports.add(line)
        # 保留所有带;的行
        elif ';' in line:
            new_lines.append(line)
        # 处理类和方法的开始和结束括号
        elif line.strip().startswith('{') or line.strip().startswith('}'):
            new_lines.append(line)
        # 处理其他行,包括普通语句和空行
        elif line.strip().startswith(('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                                      'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                                      'u', 'v', 'w', 'x', 'y', 'z')):
            if '.java' not in line:
                new_lines.append(line)
    global copyText
    copyText = '\n'.join(new_lines)
    return '\n'.join(new_lines)  # 将处理后的行合并成文本返回


# 界面布局
layout = [
    [sg.Text('选择要提取Java代码的.docx文件')],
    [sg.Input(key='file_path', enable_events=True, visible=False), sg.FileBrowse('选择文件')],
    [sg.Multiline(key='code_output', size=(80, 20))],
    [sg.Button('提取文本'), sg.Button('一键复制'), sg.Button('退出程序')]
]

# 创建窗口
window = sg.Window('Java代码提取器', layout)

# 事件循环
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event == '退出程序':
        break
    elif event == 'file_path':
        # 从文件中读取文本
        file_path = values['file_path']
        if file_path.endswith('.docx'):
            text = docx2txt.process(file_path)
            # 提取Java代码
            code = extract_java_code(text)
            # 显示提取结果
            window['code_output'].update(code)
            sg.popup('提取成功')
        else:
            sg.popup('请选择.docx文件')
    elif event == '提取文本':
        # 从文件中读取文本
        file_path = values['file_path']
        if file_path.endswith('.docx'):
            text = docx2txt.process(file_path)
            # 提取Java代码
            code = extract_java_code(text)
            # 显示提取结果
            window['code_output'].update(code)
            sg.popup('提取成功')
        else:
            sg.popup('请选择.docx文件')
    elif event == '一键复制':
        if copyText == '':
            sg.popup("复制失败,请先提取")
        else:
            pyperclip.copy(copyText)
            sg.popup('复制成功')

# 关闭窗口
window.close()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 演示文稿:
  • 网页版:
  • 网页代码:
  • 代码和程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档