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

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

本帖最后由 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类似的结果 ,请高手指教!!

回复 6# happy886rr


    没有能按第二列对就连接后面的数据!!还是非常感谢您的热心!!

TOP

回复 3# taofan712


    非常感谢!!

TOP

本帖最后由 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

评分人数

    • codegay: 编辑器设置自动把TAB替换为4空格比较好。技术 + 1

TOP

回复 4# 老刘1号


    蛋疼

TOP

回复 3# taofan712


    写这么多注释干啥……
可读性已经很高了……

TOP

本帖最后由 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

评分人数

    • yiranlj: 思路清晰、热心详细!技术 + 1
    • happy886rr: 不错,思路清晰,注释完备技术 + 1

TOP

补充:第二列的数字限制为[0-9]

TOP

返回列表