批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文本处理] [已解决]批处理如何根据另一个文本重新排序?

文本1【】内的2组词语,有的是前对后错,有的是后对前错。
文本2的词语,都是正确的词语。
请问批处理如何根据文本2,对文本1的词的前后位置重新排序,实现文本3的效果,前错后对。
文本1存在但文本2不存在的词就不用提出来了。

文本1
【好像】【好象】
【服最】【服罪】
【叫作】【叫做】
【宁缺毋滥】【宁缺勿滥】
【所做所为】【所作所为】



文本2
【好像】
【服罪】
【宁缺毋滥】
【所作所为】


文本3
【好象】→【好像】
【服最】→【服罪】
【宁缺勿滥】→【宁缺毋滥】
【所做所为】→【所作所为】


多谢楼下各位,但不知为啥,只有2楼的结果是正确的。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 77七 于 2023-1-19 21:13 编辑
  1. @echo off
  2. rem 文本和批处理全部以ansi编码格式保存
  3. for /f "tokens=1 delims=】【" %%i in ('type 文本2.txt') do (
  4.         set _"%%i"=ture
  5. )
  6. for /f "tokens=1-2 delims=】【" %%a in ('type 文本1.txt') do (
  7.         if defined _"%%b" (
  8.                 echo 【%%a】→【%%b】
  9.         )
  10.         if defined _"%%a" (
  11.                 echo 【%%b】→【%%a】
  12.         )
  13. )>>文本3.txt
  14. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (文本2.txt) do (
  3. for /f "delims=" %%m in (文本1.txt) do echo %%m|findstr /i "%%i"&&set "ww=%%m"&&set ww=!ww:%%i=!&&echo !ww!→%%i>>文本3.txt
  4. )
  5. pause
复制代码
目的,学习批处理

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 保存为ansi编码格式
  3. (for /f "tokens=*" %%a in ('findstr /ig:文本2.txt 文本1.txt') do (
  4.      set "str=%%a"
  5.      for /f "tokens=*" %%b in (文本2.txt) do (
  6.           if not "!str:%%b=!" == "!str!" echo !str:%%b=!%%b
  7.      )
  8. ))>文本3.txt
  9. pause
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2 delims=【】" %%i in (1.txt) do (
  4.     set /p str=
  5.     if not "!str!"=="【%%i】" (echo,【%%i】→【%%j】) else echo,【%%j】→【%%i】
  6. ))<2.txt>3.txt
  7. pause
复制代码

TOP

确保1.txt及2.txt已保存了ANSI编码格式,下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),执行
  1. gawk -F"[【】]+" "NR==FNR{A[$0];next}{((\"【\"$2\"】\")in A)?($0=\"【\"$3\"】→【\"$2\"】\"):($0=\"【\"$2\"】→【\"$3\"】\")}1" 2.txt 1.txt>3.txt
复制代码

TOP

回复 6# hfxiang


    我知道问题所在了,为何只有1楼是正确的。
因为有的词文本2不存在,只有文本1存在。所以文本2不存在的词就不用提出来了。不然出来的排序是错的。

TOP

回复 7# 每天几分


    你提问时并没有表达完整,再试试以下脚本:
  1. gawk -F"[【】]+" "NR==FNR{A[$0];next}{if((\"【\"$2\"】\")in A){$0=\"【\"$3\"】→【\"$2\"】\"} else {$0=\"【\"$2\"】→【\"$3\"】\"}}1" 2.txt 1.txt>3.1.txt
复制代码

TOP

本帖最后由 每天几分 于 2023-1-20 18:27 编辑

回复 8# hfxiang


    1楼已经重新给出例子了,你这个提取出来的文本还是不对。。。

TOP

回复 9# 每天几分

我写的在win7系统测试过的,你的系统下不能正确显示结果吗
目的,学习批处理

TOP

回复 9# 每天几分
4楼的不满足? 输出加→这个的话  第六行这样:echo !str:%%b=!→%%b

TOP

返回列表