标题: [文本处理] 如何根据两个文本指定列的相同内容将一个文本对应的其他列的内容插入到另一个文本里 [打印本页]
作者: yiranlj 时间: 2017-7-4 16:42 标题: 如何根据两个文本指定列的相同内容将一个文本对应的其他列的内容插入到另一个文本里
本帖最后由 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类似的结果 ,请高手指教!!
作者: yiranlj 时间: 2017-7-4 18:19
补充:第二列的数字限制为[0-9]
作者: taofan712 时间: 2017-7-4 23:12
本帖最后由 taofan712 于 2017-7-4 23:18 编辑
- @echo off
- rem 关闭回显
- (for /f "tokens=1,2" %%a in (2.txt) do (
- rem 读取2.txt中的第一列和第二列内容
- for /f "tokens=2,3" %%c in (1.txt) do (
- if %%b equ %%c echo;%%a %%b %%d
- rem 对比1.txt与2.txt中的第二列,如果相同,则将1.txt中1、2列和2.txt中第3列写进临时文件tmp.x
- )
- ))>tmp.x
- sort tmp.x>3.txt
- rem 对临时文件中的第二列排序后写进3.txt。
- del /f /q tmp.x
- rem 删除临时文件
- start 3.txt
- rem 打开3.txt。
复制代码
作者: 老刘1号 时间: 2017-7-4 23:26
回复 3# taofan712
写这么多注释干啥……
可读性已经很高了……
作者: taofan712 时间: 2017-7-4 23:32
回复 4# 老刘1号
蛋疼
作者: happy886rr 时间: 2017-7-5 08:38
本帖最后由 happy886rr 于 2017-7-5 19:03 编辑
batch- @echo off
-
- REM 建立索引
- for /f "tokens=2*" %%a in (1.txt) do (
- set "__%%a=%%b"
- )
-
- REM 文本排序
- for /f "tokens=1,2" %%a in (2.txt) do (
- call,set "__#%%b=%%a %%b %%__%%b%%"
- )
-
-
- REM 写入文件
- (
- REM 文本排序
- for /f "tokens=2 delims==" %%a in ('set __#') do (
- echo %%a
- )
- )>3.txt
-
- REM 打开结果
- start 3.txt
- exit /b
复制代码
python- # 2017-07-05 by LEO
-
- def PText():
- # 建立字典
- myINDEX={}
- myTEXT=[]
-
- # 读取索引
- for rLINE in open("1.txt"):
- rDIC=rLINE.split()
- myINDEX[rDIC[1]]=rDIC[2]
-
- # 遍历对象
- for rLINE in open("2.txt"):
- rDIC=rLINE.split()
- # 在字典中查找KEY
- if rDIC[1] in myINDEX:
- # 拼接文本
- myTEXT.append(rDIC[0] +" "+ rDIC[1] +" "+ myINDEX[rDIC[1]] +"\r\n")
-
- # 排序
- myTEXT.sort()
-
- # 输出文件
- with open('3.txt', 'w') as f:
- for oLINE in myTEXT:
- f.write(oLINE)
-
- # 主本
- if __name__ =="__main__":
- PText()
复制代码
js- 1>1/* :
- @echo off
- cscript -nologo -e:jscript "%~f0" %*
- pause&exit /b
- */
-
- var myText=[], myIndex=readFile("1.txt");
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var f = fso.OpenTextFile("2.txt", 1);
-
- while (!f.AtEndOfStream){
- var s=[];
- s = f.ReadLine().split(/[ ]+/);
- if(myIndex[s[1]]){
- myText.push(s[0] +" "+ s[1] +" "+ myIndex[s[1]] + "\r\n");
- }
- }
- f.Close();
-
- myText.sort();
-
- var fText="";
- for(var i=0; myText[i]; i++){
- fText += myText[i];
- }
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- f = fso.OpenTextFile("3.txt", 2, true);
- f.WriteLine(fText);
- f.Close();
-
-
- //读文件
- function readFile(filename, myIndex){
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var f = fso.OpenTextFile(filename, 1);
- var myIndex=[];
- while (!f.AtEndOfStream){
- var s=[];
- s = f.ReadLine().split(/[ ]+/);
- myIndex[s[1]]=s[2];
- }
- f.Close();
- return myIndex;
- }
复制代码
作者: yiranlj 时间: 2017-7-5 16:14
回复 3# taofan712
非常感谢!!
作者: yiranlj 时间: 2017-7-5 16:24
回复 6# happy886rr
没有能按第二列对就连接后面的数据!!还是非常感谢您的热心!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |