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

如果改用 find.exe 匹配utf-8网页中的汉字数据无误,可用以下代码一气呵成...
aloha20200628 发表于 2024-7-9 09:28



    谢谢谢谢

TOP

本帖最后由 qixiaobin0715 于 2024-7-9 15:45 编辑

楼主未直接提供html文件,只是摘写了片段,不知实际内容如何。按照顶楼文件片段分析,如果要使用findstr命令,可提取行首带有“<td”标签的行,来过滤掉无用的内容,而不需要考虑的太复杂。像这样使用:
  1. findstr /b "<td" 1.html
复制代码

TOP

回复 32# qixiaobin0715


上面多位网友的代码都能实现,目前使用了18楼的代码(主要因为我能看懂)

我把一个html文件传到度盘吧,有想继续研究的请看看(7天有效期)
  1. https://pan.baidu.com/s/1_tWWy4L-C8qftA0T3qwGGQ?pwd=1234
复制代码

TOP

回复 20# aloha20200628

文件发这里了
  1. https://pan.baidu.com/s/1_tWWy4L-C8qftA0T3qwGGQ?pwd=1234
复制代码

TOP

回复 34# hnfeng

将29楼代码存为utf-8编码脚本,用楼主最新提供的 ‘3_2.5_activity_H2J_Log_Page1.html’ (更名为代码中设定的 1.html)测试顺利通过

TOP

回复  hnfeng

将29楼代码存为utf-8编码脚本,用楼主最新提供的 ‘3_2.5_activity_H2J_Log_Page1.html’ ...
aloha20200628 发表于 2024-7-9 17:34



    是的是的,上面多位朋友的代码都可以顺利通过

TOP

本帖最后由 newswan 于 2024-7-9 18:28 编辑

powershell
  1. $file = ".\3_2.5_activity_H2J_Log_Page1.html"
  2. $Hash = [Ordered]@{ "任务名称" = "" ; "开始检查" = "" ; "检查完毕" = "" ; "同步任务开始时间" = "" ; "同步任务结束时间" = "" }
  3. $arr = (( Get-Content -Path $file -Encoding UTF8 -Raw ) -replace "<[^>]*>" -replace "`r" ) -split "`n"
  4. for ( $i=0 ; $i -lt $arr.Count ; $i++ ) {
  5. if ( $arr[$i] -in $hash.Keys ) {
  6. $hash[$arr[$i]] = $arr[$i+1]
  7. }
  8. }
  9. $Hash
复制代码

TOP

本帖最后由 aloha20200628 于 2024-7-9 19:52 编辑


跟跑本帖至此,可对findstr/find匹配 ‘双字节数据如中文数据’ 的能力给一个小结,针对楼主所给网页测试文件的实测结果》
一。若网页文件是系统默认编码(936或gb2312或记事本ansi)
      findstr 用 /c:"..." 或 /lc:"..." 或 /rc:"..." 或 /ic:"..." 参数均可成功匹配测试文件中的5个中文关键词
二。若网页文件是utf-8编码
      findstr 用 /c:"..." 或 /lc:"..." 或 /rc:"..." 或 /ic:"..." 参数均未成功匹配测试文件中的5个中文关键词
      改用 find 即可成功匹配测试文件中的5个中文关键词(备注:find不支持正则表达式)
三。无论文本文件是系统默认编码还是utf-8编码,cmd窗口采用936或65001码页均可正确显示 ‘其中的ascii字符’,故无须专门切换相应的码页,findstr 即可成功匹配 ‘文件中的ascii字符数据’...

TOP

跟跑本帖至此,可对findstr/find匹配 ‘双字节数据如中文数据’ 的能力给一个小结,针对楼主所给网页测试 ...
aloha20200628 发表于 2024-7-9 19:47



总之,放弃这些没有前途的,改 powershell

TOP

Test.bat,脚本保存为ANSI编码
  1. @if(0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" 1.html > 1.txt
  3. pause & exit
  4. @end
  5. var srcFile = WSH.Arguments(0);
  6. var obj = {任务名称:'', 同步任务开始时间:'', 开始检查:'', 检查完毕:'', 同步任务结束时间:''}
  7. var getText = function(file) {
  8.     var ado = new ActiveXObject('ADODB.Stream');
  9.     ado.Mode = 3;
  10.     ado.Type = 2;
  11.     ado.Charset = 'utf-8';
  12.     ado.Open();
  13.     ado.LoadFromFile(file);
  14.     var str = ado.ReadText(-1);
  15.     ado.Close();
  16.     return str;
  17. }
  18. var html = new ActiveXObject('htmlfile');
  19. html.write(getText(srcFile));
  20. var node = html.getElementsByTagName('td')
  21. for(var i=0; i<node.length-1; i++){
  22.     var s = node[i].innerText;
  23.     if (obj.hasOwnProperty(s)) obj[s] = node[i+1].innerText.replace(/\(.*$/, '');
  24. }
  25. for (var k in obj) WSH.Echo(obj[k]);
复制代码

TOP

回复 39# newswan


    个人观点:
你认为"有前途"的,其他人或许认为就是辣鸡。
不管啥方法,只要能解决实际问题,没有绝对好坏之分。

TOP

回复 1# hnfeng
用gawk的解决方法如下:
下载特定版本(mbcs,3.1.7) ( http://bcn.bathome.net/tool/mbcs,3.1.7/gawk.exe )

一、在命令行下执行:
  1. gawk -W ctype=UTF8 "/(\344\273\273\345\212\241\345\220\215\347\247\260)|(\345\220\214\346\255\245\344\273\273\345\212\241\345\274\200\345\247\213\346\227\266\351\227\264)|(\345\274\200\345\247\213\346\243\200\346\237\245)|(\346\243\200\346\237\245\345\256\214\346\257\225)|(\345\220\214\346\255\245\344\273\273\345\212\241\347\273\223\346\235\237\346\227\266\351\227\264)/{A=1;next}A==1{A=0;print substr(gensub(/^<.+>([^<>]+)<.+>$/,\"\\1\",\"1\",$0),1,19)}" 3_2.5_activity_H2J_Log_Page1.html>out.txt
复制代码
二、将以下文本以utf-8编码保存为a.awk
  1. /(任务名称)|(同步任务开始时间)|(开始检查)|(检查完毕)|(同步任务结束时间)/ {
  2. A = 1
  3. next
  4. }
  5. A == 1 {
  6. A = 0
  7. print substr(gensub(/^<.+>([^<>]+)<.+>$/, "\\1", "1", $0), 1, 19)
  8. }
复制代码
然后在命行下执行:gawk -W ctype=UTF8 -fa.awk 3_2.5_activity_H2J_Log_Page1.html>out.txt

TOP

返回列表