找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19839|回复: 6

【完结】20元求提取文本

  [复制链接]
发表于 2019-12-5 15:29:06 | 显示全部楼层 |阅读模式
本帖最后由 lxh623 于 2019-12-5 16:06 编辑

文本a每一行是2-7汉字,文本tmp是句子。
想用a的每一行搜索tmp,如果有,写入文本b。写入的内容是“搜索的词语--提取的行”。--直接是\t更好。
tmp比较大,几十M。希望高效。
谢谢!

我的代码不运行。a里面没有-。
  1. @echo off
  2. for /f "tokens=1 delims=-" %%i in (a.txt) do (
  3.     for /f "delims=" %%a in ('findstr /g:a.txt tmp.txt')
  4. ) do echo "%%i--%%a" >>b.txt
复制代码
发表于 2019-12-5 15:47:53 | 显示全部楼层
回复 1# lxh623
  1. @echo off
  2. (for /f %%i in ('type "a.txt"') do (
  3.     for /f "delims=" %%a in ('findstr "%%i" tmp.txt') do (
  4.         echo "%%i--%%a"
  5.     )
  6. ))>b.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 乐于助人

查看全部评分

 楼主| 发表于 2019-12-5 16:04:59 | 显示全部楼层
本帖最后由 lxh623 于 2019-12-5 16:08 编辑

群里无法发红包,怎么办。我记得以前还可以转账给您。
我进的是公众号。
已经论坛捐助20元。谢谢!
发表于 2019-12-5 16:14:35 | 显示全部楼层
回复 3# lxh623


这次我替你在微信群里发红包
请微信添加朋友:BatHome加群助手,拉你入群。
发表于 2019-12-5 16:34:35 | 显示全部楼层
本帖最后由 WHY 于 2019-12-5 23:26 编辑

Test.JS
试试
  1. var fso = new ActiveXObject('Scripting.FileSystemObject');
  2. var f1 = fso.OpenTextFile('a.txt', 1);
  3. var f2 = fso.OpenTextFile('tmp.txt', 1);
  4. var arr = [], map = [];

  5. while( !f1.AtEndOfStream ){
  6.     var s = f1.ReadLine();
  7.     if(!/^\s*$/.test(s)) map[s] = 1;
  8. }

  9. while( !f2.AtEndOfStream ){
  10.     var s = f2.ReadLine();
  11.     for(var i=2; i<=7; i++){
  12.         for(var j=0; j<=s.length-i; j++){
  13.             var s1 = s.substr(j,i);
  14.             if(map[s1]) arr.push(s1 + '\t' + s);
  15.         }
  16.     }
  17. }
  18. fso.OpenTextFile('b.txt', 2, true).WriteLine(arr.join('\r\n'));

  19. WSH.Echo('Done')
复制代码
改一下,不用正则,回溯次数太多,效率不高。

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 乐于助人

查看全部评分

发表于 2019-12-5 19:19:40 | 显示全部楼层
本帖最后由 Gin_Q 于 2019-12-5 20:17 编辑
  1. @echo off&title gan
  2. ::出现乱码请把文本另存为ANSI编码
  3. ::有特殊字符需要在echo后面加""
  4. >b.txt (for /f  %%a in (a.txt) do (
  5.         for /f %%b in ('findstr "%%a" tmp.txt') do echo %%a\t%%b))
  6. pause
复制代码
::上面不行就试试这个
  1. >b.txt (for /f %%a in ('type a.txt') do (
  2.         for /f %%b in ('type tmp.txt ^| findstr "%%a"') do echo %%a\t%%b))
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 乐于助人

查看全部评分

发表于 2019-12-5 19:34:10 | 显示全部楼层
回复 6# Gin_Q
32位系统第一个用不了@Batcher您知道什么情况吗??
64位系统的可以用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:11 , Processed in 0.029586 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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