标题: [文本处理] 【已解决】求助:删除最后四位数相同的重复行 [打印本页]
作者: 思想之翼 时间: 2017-11-19 18:47 标题: 【已解决】求助:删除最后四位数相同的重复行
本帖最后由 思想之翼 于 2017-11-26 11:40 编辑
名称为01的文件夹内,有70个文本,名称为01、02...70,每个文本有若干行数据,格式如下:
4895172 4907(删除该行)
4895173 4907(删除该行)
4895174 7650
4895175 4907
4895176 3990(删除改行)
4895177 3990
若文本中各行数据存在最后四位数相同,则删除重复行,仅保留一行。
上例中,删除重复行后的新文本为:
4895174 7650
4895175 4970
4895177 3990
新文本数据覆盖原文本数据
作者: WHY 时间: 2017-11-19 23:54
本帖最后由 WHY 于 2017-11-20 22:03 编辑
- @if(0)==(0) echo off
- dir /b *.txt | cscript //nologo //e:jscript "%~f0"
- pause & goto :EOF
- @end
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- while(!WSH.StdIn.AtEndOfStream) getUnique(WSH.StdIn.ReadLine());
-
- function getUnique(strFile){
- var objFile = fso.OpenTextFile(strFile, 1); //打开文件
- var arr = objFile.ReadAll().split('\r\n'); //读取文件内容,按行分割数组
- objFile.Close(); //文件关闭
- var len = arr.length, map = [];
- for(var i=len-1; i>=0; i--){ //反序遍历数组
- var m = arr[i].match(/^\S+\s+(\S+)$/); //正则匹配 arr 数组每个元素
- if(m){ //如果匹配成功
- if(!map[m[1]]){ //如果 map[m[1]] 未定义
- map[m[1]] = 1; //变量 map[m[1]] 赋值为 1
- }else { //否则,如果已定义 map[m[1]]
- arr.splice(i, 1); //移除arr数组第i个元素
- }
- }else {
- arr.splice(i, 1); //匹配失败,移除arr数组第i个元素
- }
- }
- fso.OpenTextFile(strFile, 2).WriteLine(arr.join('\r\n')); //打开并写入文本
- }
复制代码
作者: 思想之翼 时间: 2017-11-20 00:02
本帖最后由 思想之翼 于 2017-11-20 00:04 编辑
回复 2# WHY
谢谢!运行正常
作者: WHY 时间: 2017-11-21 11:18
没想到改成 splice 方法后效率低到没底线,算了,换成修改之前的方案。- @if(0)==(0) echo off
- dir /b *.txt | cscript //nologo //e:jscript "%~f0"
- pause & goto :EOF
- @end
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- while(!WSH.StdIn.AtEndOfStream) getUnique(WSH.StdIn.ReadLine());
-
- function getUnique(strFile){
- var objFile = fso.OpenTextFile(strFile, 1); //打开文件
- var arrIn = objFile.ReadAll().split('\r\n'); //读取文件内容,按行分割数组
- objFile.Close(); //文件关闭
- var len = arrIn.length, arrOut = [], map = [];
- for(var i=len-1; i>=0; i--){ //反序遍历数组
- var m = arrIn[i].match(/^\S+\s+(\S+)$/); //正则匹配
- if(m) if(!map[m[1]]){ //如果匹配成功, map[m[1]] 无定义
- arrOut.push(m[0]); //整行添加到 arrOut 数组
- map[m[1]] = 1; //map[m[1]] 赋值为 1
- }
- }
- fso.OpenTextFile(strFile, 2).WriteLine(arrOut.reverse().join('\r\n'));//写入文本
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |