[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【放弃】80元求修改xhtml之二

本帖最后由 lxh623 于 2023-4-26 09:11 编辑

http://www.bathome.net/thread-65828-1-1.html
修改一下。直接的办法可能不行。
我这里有两个文件夹。一个是“梵文”,一个是“epub解包后”。后者包含许多文件夹。前者里面是几百个文件,比如,F28n1071_005.xhtml 。它的"text_3">(.{1})提取汉字,写入文本F28n1071_005.txt。而对应有个“J:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”,里面一定有005.xhtml,它的"text_3">后面有可能是多个汉字(1-7个,参考上传的同音字txt),而且总数多半少一些。我想,按照F28n1071_005.txt的顺序修改005.xhtml,留下一个汉字。修改的行,文本F28n1071_005.txt留下空行。没有的就原位留下。
主要是解决同音字的问题(相同罗马字标注),同时有助于手动找出没有标注"text_3"的罗马字。

感觉复杂,但是,也许能够做到吧。
谢谢!

回复 1# lxh623
  1. function getDic() {
  2. param(
  3. [string]$filename
  4. )
  5. $f1 = Get-Content -Encoding UTF8 ( $filename + ".xhtml" )
  6. $f2 = $f1 -join "`n"
  7. $f3 = $f2 -replace '(<span class="text_3">[^<>]+</span><span class="text_1">[(][^()]+[)]</span>)',"`n`$1`n" -split "`n"
  8. $f4 = $f3 -match "text_3"
  9. $f5 = $f4 -replace "<[^<>]+>",""
  10. $f5 | Out-File -Encoding utf8 ( $filename + ".txt" )
  11. }
  12. getDic ".\juans\F28n1071_005"
  13. getDic ".\juans\005"
复制代码
提取 text_3 text_1 里的字符
怎么替换 005 没明白

TOP

回复 2# newswan
没有明白,怎么有批处理?
谢谢!

如果手工修改,我的意思是提取文字。然后,五个一组去对001.xhtml。多个汉字那种,删除多余的汉字。
比如,F28n1071_003。
提取"text_3">(.{1}),也就是代码后面一个汉字,到文本F28n1071_003。
打开“J:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”的003.xhtml,提取"text_3">(.{1,7})</span>,也就是中间的几个汉字,到文本003 。
第一个文本前面五行是:





第二个文本前面五行是:

由蒤

夸慔
叻粺
对应的行都包含,那么,到003.xhtml把第二个<span class="text_3">由蒤</span>换成<span class="text_3">蒤</span>。
第四第五类似。
但是,第二个文本会少一些,因为特征字符串不足,梵文没有替换完全,希望检查之后手动添加。

TOP

用 xx_00x 里的
  1. <span class="text_3">[^<>]+</span>
复制代码
替换
00x 里的
  1. <span class="text_3">[^<>]+</span>
复制代码
按顺序,5个一组

TOP

  1. <# :
  2. cls&echo off&cd /d "%~dp0"&mode con lines=5000&rem bat存为ANSI/GB2312编码
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
  5. pause
  6. exit
  7. #>
  8. $folder1="D:\大藏经修改\梵文";
  9. $folder2="D:\大藏经修改\epub解包后\F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans";
  10. if(-not (test-path -literal $folder1)){write-host ('"'+$folder1+'" path error or not exist');exit;}
  11. if(-not (test-path -literal $folder2)){write-host ('"'+$folder2+'" path error or not exist');exit;}
  12. $enc=New-Object System.Text.UTF8Encoding $False;
  13. $files=@(dir -literal $folder1|?{('.xhtml' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  14. if($files.length -ge 1){
  15.     for($i=0;$i -lt $files.length;$i++){
  16.         write-host $files[$i].FullName -ForegroundColor yellow;
  17.         $arr=New-Object -TypeName System.Collections.ArrayList;
  18.         $text1=[IO.File]::ReadAllText($files[$i].FullName, $enc);
  19.         $m1=[regex]::matches($text1, 'class="text_3">([^<]+)');
  20.         $m2=[regex]::match($files[$i].Name, '(?i)_([0-9]+\.xhtml)$');
  21.         if($m2.Success){
  22.             $juansfile=$folder2.trimend('\')+'\'+$m2.groups[1].value;
  23.             if(test-path -literal $juansfile){
  24.                 write-host $juansfile -ForegroundColor yellow;
  25.                 $global:n=0
  26.                 $text2=[IO.File]::ReadAllText($juansfile, $enc);
  27.                 $text2=[regex]::replace($text2, 'class="text_3">([^<]+)', {
  28.                     param($m3);
  29.                     $str=$m3.groups[0].value;
  30.                     if($global:n -lt $m1.count){
  31.                         if($m3.groups[1].value.Contains($m1[$global:n].groups[1].value)){
  32.                             $str=$m1[$global:n].groups[0].value;
  33.                             [void]$arr.add('');
  34.                             write-host ($m1[$global:n].groups[1].value+' --> '+$m3.groups[1].value);
  35.                         }else{
  36.                            [void]$arr.add($m1[$global:n].groups[1].value);
  37.                         }
  38.                     }
  39.                     $global:n++;
  40.                     return $str;
  41.                 });
  42.                 [IO.File]::WriteAllText($juansfile, $text2, $enc);
  43.             }else{write-host ('"'+$juansfile+'" not exist');}
  44.         }
  45.         for($j=$global:n;$j -lt $m1.count;$j++){
  46.             [void]$arr.add($m1[$j].groups[1].value);
  47.         }
  48.         $outfile=$folder1.trimend('\')+'\'+$files[$i].BaseName+'.txt';
  49.         [IO.File]::WriteAllLines($outfile, $arr, $enc);
  50.         write-host '';
  51.     }
  52. }else{write-host ('no xhtmlfile in "'+$folder1+'"');}
复制代码
1

评分人数

提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

zaqmlp 发表于 2023-4-19 13:38

我上传文件夹名和文件名的两个文件。能不能完善一点点。谢谢!

TOP

回复 6# lxh623


不清楚你的实际目录结构是怎样,你原来网盘上传的跟现在说明的完全不符,你要么就按我写的目录结构,要么就重新整理打包上传
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 7# zaqmlp
梵文文件夹,和解包后的压缩文件,已经上传。谢谢!

TOP

本帖最后由 zaqmlp 于 2023-4-19 14:31 编辑

回复 8# lxh623


    怎么知道“梵文”文件夹里哪些xhtml是跟“F1071 釋教最上乘秘密藏陀羅尼集\OEBPS\juans”里的xhtml对应呀?!需求要说清楚,而不是让人来猜
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 newswan 于 2023-4-19 16:42 编辑

"\梵文\${key}_00x.xhtml" "\${epub解包}\juans\00x.xhtml" 两个文件夹里面的文件怎么对应的?

比如 "\梵文\F28n1071_003.xhtml" 和 哪个 "\${epub解包}\juans\003.xhtml" 对应的?
${epub解包} 的实际名字是 "F1071 釋教最上乘秘密藏陀羅尼集" ,怎么和 F28n1071 对应上?

要么把对应的文件放一起,打包

而且,2楼对应两个文件,过滤后,行数不同

TOP

本帖最后由 lxh623 于 2023-4-19 20:26 编辑

回复 9# zaqmlp
四位数确定的。前面两个是序号。就是B07n0023_003等等,第二位到第四位可以删除,B0023_003。或者我事先重新命名。
谢谢!

TOP

回复 11# lxh623

还是没说清楚,比如T18n0894_001.xhtml、T18n0894a_001.xhtml、T18n0894b_001.xhtml,都是对应同一个“T0894 xxxxx”文件夹下OEBPS\juans里的001.xhtml吗?!
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 lxh623 于 2023-4-21 07:41 编辑

T18n0894_001.xhtml没有这个。我不是上传了吗。
麻烦了。
文件名我全部重新修改了。
  1. B0023_003.xhtml
  2. D9025_001.xhtml
  3. D9025_003.xhtml
  4. F1071_001.xhtml
复制代码

TOP

本帖最后由 lxh623 于 2023-4-21 16:45 编辑

试了一下,好像没有达成目的。
例如,F1071_003.txt第14行,003.txt里面没有,就用F1071_003.txt第15行的字到003.txt第14行匹配,如果相同,就跳过;如果有多个汉字而且包含这个汉字,就继续修改003.xhtml。
能不能把两个文本的行和xhtml对应的"text_3">(.{1,7})</span>,虚拟编号?每一次增加一个序号。

另外一个思路。
修改多个汉字为一个。
F1071_003.xhtml提取"text_3">(.{1})</span>到F1071_003.txt。003.xhtml提取"text_3">(.{2,7})</span>到003.txt,003.txt删除重复行。

我在EmEditor用 [仕狿箘]筛选F1071_003.txt,只有一个汉字。那么,003.xhtml中全部"text_3">仕狿箘改为"text_3">仕。
但是,这一步怎么用批处理做到。是用003.txt同一行的2-7个汉字一个一个去搜索F1071_003.txt,如果搜索到只有一个相同的汉字,那么就这样修改。如果一个文档有两个不同汉字的结果,暂时不修改。最后,删除003.txt。

TOP

本帖最后由 lxh623 于 2023-4-24 17:01 编辑

一直没有答案,请允许我重新描述一下问题。
这里有两个文件夹。一个是“梵文”,一个是“epub解包后”。后者包含许多文件夹。前者里面是几百个文件,文件名如13楼。符号_前面的字符,是在“epub解包后”里面的子文件夹的名称前面的字符。
首先,从“梵文”中的文件提取字符,比如从B0023_003.xhtml中,提取<span class="text_3">(.{1,2})</span><span class="text_1">\((.{1,9})\)</span>,得到\1\t\2,写入文本B0023_003.txt。删除重复行。
然后到epub解包后\B0023 金剛般若波羅蜜經講義\OEBPS\juans中的003.xhtml中提取<span class="text_3">(.{2,7})</span><span class="text_1">\((.{1,9})\)</span>,得到\1\t\2,写入文本003.txt。删除重复行。
B0023_003.xhtml和相应子文件夹的003.xhtml是唯一的对应文件。
然后,B0023_003.txt和003.txt的每一行可以分别定义为^(.*)\t(.*)$。003.txt的\t后面部分(即\2)如果在B0023_003.txt是唯一的【严格意义上,\t\2$去搜索B0023_003.txt】,就在003.xhtml中,用B0023_003.txt这一行\t前面部分替换003.txt的\t前面部分。
如果不是唯一,就跳过。
谢谢!

TOP

返回列表