快速提取文档中的java,c代码,自动过滤头文件
演示文稿:
网页版:
体验地址:https://cs.uurr.cn/info/extract.php
网页代码:
<!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语言
代码和程序
程序下载:https://wwkm.lanzouf.com/iU6Kk0twjn1a
(解压后找到Main.exe运行即可)
程序代码:
(py写的比较复杂,而且可能问题会比较多,不支持c,懒得改了)
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()
THE END
暂无评论内容