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

[文本处理] 如何根据两个文本指定列的相同内容将一个文本对应的其他列的内容插入到另一个文本里

[复制链接]
发表于 2017-7-4 16:42:55 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-7-4 21:21 编辑

字符查找替换问题请教!
文本1内容:
学校     3     C   wer  
学校     2     B   23432
学校     1     A   8765
学校     4     D   1234
.....
文本2内容:
老师     3   
老师     2  
老师     1  
老师     4
.........
文本3内容:
老师     1    A  ...
老师     2    B  ...
老师     3    C   ..
老师     4    D   ........

如何用批处理 将文本1中的第3列  按第2列内容对应复制到文本2的第3列,即得到文本3类似的结果 ,请高手指教!!
 楼主| 发表于 2017-7-4 18:19:34 | 显示全部楼层
补充:第二列的数字限制为[0-9]
发表于 2017-7-4 23:12:26 | 显示全部楼层
本帖最后由 taofan712 于 2017-7-4 23:18 编辑

  1. @echo off
  2. rem 关闭回显
  3. (for /f "tokens=1,2" %%a in (2.txt) do (
  4. rem 读取2.txt中的第一列和第二列内容
  5.     for /f "tokens=2,3" %%c in (1.txt) do (
  6.         if %%b equ %%c echo;%%a        %%b        %%d
  7. rem 对比1.txt与2.txt中的第二列,如果相同,则将1.txt中1、2列和2.txt中第3列写进临时文件tmp.x
  8.     )
  9. ))>tmp.x
  10. sort tmp.x>3.txt
  11. rem 对临时文件中的第二列排序后写进3.txt。
  12. del /f /q tmp.x
  13. rem 删除临时文件
  14. start 3.txt
  15. rem 打开3.txt。
复制代码

评分

参与人数 2技术 +2 收起 理由
yiranlj + 1 思路清晰、热心详细!
happy886rr + 1 不错,思路清晰,注释完备

查看全部评分

发表于 2017-7-4 23:26:23 | 显示全部楼层
回复 3# taofan712


    写这么多注释干啥……
可读性已经很高了……
发表于 2017-7-4 23:32:37 | 显示全部楼层
回复 4# 老刘1号


    蛋疼
发表于 2017-7-5 08:38:57 | 显示全部楼层
本帖最后由 happy886rr 于 2017-7-5 19:03 编辑

batch

  1. @echo off

  2. REM 建立索引
  3. for /f "tokens=2*" %%a in (1.txt) do (
  4.         set "__%%a=%%b"
  5. )

  6. REM 文本排序
  7. for /f "tokens=1,2" %%a in (2.txt) do (
  8.         call,set "__#%%b=%%a     %%b     %%__%%b%%"
  9. )


  10. REM 写入文件
  11. (
  12.         REM 文本排序
  13.         for /f "tokens=2 delims==" %%a in ('set __#') do (
  14.                 echo %%a
  15.         )
  16. )>3.txt

  17. REM 打开结果
  18. start 3.txt
  19. exit /b
复制代码
python
  1. # 2017-07-05 by LEO

  2. def PText():
  3.         # 建立字典
  4.         myINDEX={}
  5.         myTEXT=[]

  6.         # 读取索引
  7.         for rLINE in open("1.txt"):
  8.                 rDIC=rLINE.split()
  9.                 myINDEX[rDIC[1]]=rDIC[2]

  10.         # 遍历对象
  11.         for rLINE in open("2.txt"):
  12.                 rDIC=rLINE.split()
  13.                 # 在字典中查找KEY
  14.                 if rDIC[1] in myINDEX:
  15.                         # 拼接文本
  16.                         myTEXT.append(rDIC[0] +"   "+ rDIC[1] +"   "+ myINDEX[rDIC[1]] +"\r\n")

  17.         # 排序
  18.         myTEXT.sort()

  19.         # 输出文件
  20.         with open('3.txt', 'w') as f:
  21.                 for oLINE in myTEXT:
  22.                         f.write(oLINE)

  23. # 主本
  24. if __name__ =="__main__":
  25.         PText()
复制代码
js
  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~f0"  %*
  4. pause&exit /b
  5. */

  6. var myText=[], myIndex=readFile("1.txt");
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. var f = fso.OpenTextFile("2.txt", 1);

  9. while (!f.AtEndOfStream){
  10.         var s=[];
  11.         s = f.ReadLine().split(/[ ]+/);
  12.         if(myIndex[s[1]]){
  13.                 myText.push(s[0] +"   "+ s[1]  +"   "+ myIndex[s[1]] + "\r\n");
  14.         }
  15. }
  16. f.Close();

  17. myText.sort();

  18. var fText="";
  19. for(var i=0; myText[i]; i++){
  20.         fText += myText[i];
  21. }

  22. fso = new ActiveXObject("Scripting.FileSystemObject");
  23. f = fso.OpenTextFile("3.txt", 2, true);
  24. f.WriteLine(fText);
  25. f.Close();


  26. //读文件
  27. function readFile(filename, myIndex){
  28.         var fso = new ActiveXObject("Scripting.FileSystemObject");
  29.         var f = fso.OpenTextFile(filename, 1);
  30.         var myIndex=[];
  31.         while (!f.AtEndOfStream){
  32.                 var s=[];
  33.                 s = f.ReadLine().split(/[ ]+/);
  34.                 myIndex[s[1]]=s[2];
  35.         }
  36.         f.Close();
  37.         return myIndex;
  38. }
复制代码

评分

参与人数 1技术 +1 收起 理由
codegay + 1 编辑器设置自动把TAB替换为4空格比较好。

查看全部评分

 楼主| 发表于 2017-7-5 16:14:07 | 显示全部楼层
回复 3# taofan712


    非常感谢!!
 楼主| 发表于 2017-7-5 16:24:38 | 显示全部楼层
回复 6# happy886rr


    没有能按第二列对就连接后面的数据!!还是非常感谢您的热心!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 21:26 , Processed in 0.022074 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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