吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1881|回复: 32
上一主题 下一主题
收起左侧

[原创工具] 原创Autoit脚本开源软件分享(更新到v1.2)

[复制链接]
跳转到指定楼层
楼主
blfiag 发表于 2022-11-24 10:22 回帖奖励
本帖最后由 blfiag 于 2022-11-25 21:46 编辑

应坛友 1314233 发布的 txt汉字章节批量替换为阿拉伯数字章节
为实现类似下面的小说章节
第一章 我爱你
正文
第二章 他爱你
正文
第三章 你爱他
正文
...
...
第两万一千八百二十六章 你爱他他不爱她他爱她
正文


把文字章节转换成阿拉伯数字章节
第1章 我爱你
正文
第2章 他爱你
正文
第3章 你爱他
正文
...
...
第21826章 你爱他他不爱她他爱她
正文


本人用小众脚本软件autoit做了一个简单的处理程序,
网友想学习其中的代码,故开源在此,给大家提供一种普通的思路。

#TextNovelChineseNumberToArabic 源码分享
#主要使用了正则替换和普通替换。
#大量替换直接枚举,没有加循环,更便于大家学习吧

$s=""
$file=FileOpenDialog("选择小说文本文件", @ScriptDir, "文本文件 (*.txt)|全部 (*.*)" )
$txt=FileRead($file)


$a=StringRegExp($txt, "第([一两二三四五六七八九十零〇百佰千仟万萬]+)章", 3)
If Not @Error Then
        For $i=0 to UBound($a)-1
                $s=$a[$i]
                if StringLeft($s, 1)="十" Then $s= "1" & StringMid($s, 2)
                $s=StringRegExpReplace($a[$i], "^十", "")
                $s=StringReplace($s, "十", "")
                $s=StringReplace($s, "百", "")
                $s=StringReplace($s, "佰", "")
                $s=StringReplace($s, "千", "")
                $s=StringReplace($s, "仟", "")
                $s=StringReplace($s, "万", "")
                $s=StringReplace($s, "萬", "")
                $s=StringReplace($s, "一", 1)
                $s=StringReplace($s, "两", 2)
                $s=StringReplace($s, "二", 2)
                $s=StringReplace($s, "三", 3)
                $s=StringReplace($s, "四", 4)
                $s=StringReplace($s, "五", 5)
                $s=StringReplace($s, "六", 6)
                $s=StringReplace($s, "七", 7)
                $s=StringReplace($s, "八", 8)
                $s=StringReplace($s, "九", 9)
                $s=StringReplace($s, "零", 0)
                $s=StringReplace($s, "〇", 0)
                ConsoleWrite($s & @LF)
                $txt=StringReplace($txt, "第" & $a[$i] & "章", "第" & $s & "章")
        Next
EndIf

If $s<>"" Then
        $newfile=StringReplace($file, ".", "_new.",-1)
        $fid=FileOpen($newfile, 2+8)
        FileWrite($fid , $txt)
        FileClose($fid)
        Msgbox(8192+64, "提示", "文本小说处理完毕,请自行检查" & @CRLF & "后缀_new在源文件目录处",3 )
Else
        Msgbox(8192+48, "提示", "文本小说未发现需要处理的中文数字", 3)
EndIf


#TextNovelChineseNumberToArabic 源码结束



完整代码与软件见  https://wwm.lanzout.com/iY0jf0gqpsfg (v1.0)




根据坛友提出的bug,只好不偷懒的用十进制逐渐累加
v1.2 直接放进压缩包内,大家可以再测试。 https://wwm.lanzout.com/iYfaR0gw74af


免费评分

参与人数 4吾爱币 +11 热心值 +4 收起 理由
AG9000 + 1 + 1 我很赞同!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
1314233 + 2 + 1 听我说,谢谢你,因为有你,温暖了四季
goldengod + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
wkdxz 发表于 2022-11-24 10:28
特殊时候有大用处,谢谢分享!
推荐
biqiang 发表于 2022-11-25 11:47
blfiag 发表于 2022-11-25 10:58
确实没有考虑太多,仔细想的话确实不好解决

我凑合写了一下,由于考虑是小说, 不会有十万以上章节,因此应该勉强可用,没有读文件,直接给$txt赋的值

$txt = '第一章 我爱你' & @CRLF & '正文' & @CRLF & '第二章 他爱你' & @CRLF & '正文' & @CRLF
$txt = $txt & '第三章 你爱他' & @CRLF & '正文' & @CRLF & '...' & @CRLF
$txt = $txt & '第十三章 他爱你' & @CRLF & '正文' & @CRLF & '...' & @CRLF
$txt = $txt & '第两百零三章 他爱你' & @CRLF & '正文' & @CRLF & '...' & @CRLF
$txt = $txt & '第三千零二十一章 他爱你' & @CRLF & '正文' & @CRLF & '...' & @CRLF
$txt = $txt & '第一万零五百零一章 他爱你' & @CRLF & '正文' & @CRLF & '...' & @CRLF
$txt = $txt & '第两万一千八百二十六章 你爱他他不爱她他爱她' & @CRLF & '正文'
$array = StringRegExp($txt, '第[一二三四五六七八九壹贰叁肆伍陆柒捌玖两零〇十百千万拾佰仟萬]+[章节]', 3)
If Not @Error Then
        For $i = 0 To UBound($array) - 1
                $txt = StringReplace($txt, $array[$i], '第' & HzToNum(StringTrimLeft(StringTrimRight($array[$i], 1), 1)) & StringRight($array[$i], 1))
        Next
EndIf
MsgBox(4096, '结果', $txt)

Func HzToNum($s)
        For $i = 1 To 9
                $s = StringReplace($s, StringMid('一二三四五六七八九', $i, 1), $i)
                $s = StringReplace($s, StringMid('壹贰叁肆伍陆柒捌玖', $i, 1), $i)
        Next
        $s = StringReplace($s, '两', 2)
        $s = StringReplace($s, '零', 0)
        $s = StringReplace($s, '〇', 0)
        $s = StringReplace($s, '拾', '十')
        $s = StringReplace($s, '佰', '百')
        $s = StringReplace($s, '仟', '千')
        $s = StringReplace($s, '萬', '万')
        $s = StringReplace($s, '0十', '1十')
        $s = StringReplace($s, '0百', '1百')
        If StringLeft($s, 1) = "十" Then
                $s = '1' & $s
        EndIf
        $m = 0
        $j = 0
        For $i = StringLen($s) To 1 Step -1
                $ss = StringMid($s, $i, 1)
                $x = StringInStr('十百千万', $ss)
                If $x Then
                        $j = $x
                Else
                        If Int($ss) Then
                                $m += Int($ss) * 10 ^ $j
                        EndIf
                EndIf
        Next
        Return $m
EndFunc   ;==>HzToNum
3#
 楼主| blfiag 发表于 2022-11-24 10:30 |楼主
4#
weiekko 发表于 2022-11-24 10:43
好像正则表达式
5#
zrz444 发表于 2022-11-24 10:52
本帖最后由 zrz444 于 2022-11-24 12:41 编辑

AUTOIT这个语言写点桌面小工具 蛮不错的。许多系统工具开始都用这个东西写。
6#
cd159951 发表于 2022-11-24 11:43
感谢大佬分享 好用
7#
雾都孤尔 发表于 2022-11-24 12:00
有点意思,感谢分享。
8#
ysjd22 发表于 2022-11-24 12:10
很好谢谢,有时候想用的时候找不大到。
9#
baitoje1235 发表于 2022-11-24 12:15
感谢分享,看小说必备啊
10#
1314233 发表于 2022-11-24 15:19
灰常好用,感谢大佬开源,我的小说阅读器识别不出来“第一章”“第二章”,只能识别“第1章”“第2章”,昨天弄了好久也没转换成功,感谢大佬帮助
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-11-27 04:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表