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

[文本处理] 根据文本每一行指定位置的相同字符串将该行从指定位置到行尾截取的字符串合并成一行

本帖最后由 pcl_test 于 2016-9-13 13:33 编辑

批处理根据条件,处理不同的数据
我想循环读取文件,然后截取每行的值,从第十一位截取之后的六位,再根据截取出的值是否相同,将数据合并成一行,输出到另一个文件中,请各位指教
  1. AL00001000000251000啊啊啊
  2. AL000010000002510001的费大幅度
  3. AL000010000002510002阿斯达 十大
  4. AL000010000002510003  是萨达四大
  5. AL000010000023760000啊啊
  6. AL000010000023760001啊啊3
  7. AL000010000023760002啊啊的
复制代码
1

评分人数

说人话是去重后合并成一行?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 2# codegay
根据截取后的值,是否一致,如果一致,则将那一行的数据,从第十一位开始截取,截取后的值拼接为一行
如:
AL000010000023760000啊啊
AL000010000023760001啊啊3
AL000010000023760002啊啊的

截取后,拼接,生成为:0023760000啊啊0023760001啊啊30023760001啊啊的

TOP

本帖最后由 pcl_test 于 2016-9-13 13:37 编辑

举个栗子
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in ('type "文本.txt"') do (
  3.     set "line=%%a"
  4.     for /f "delims=" %%b in ("!line:~10,6!") do set "#%%b=!#%%b!!line:~10!"
  5. )
  6. set #
  7. pause
复制代码

TOP

  1. #*第三方http://www.bathome.net/s/tool/index.html?key=gawk
  2. #*&cls&gawk -f "%~f0" "文本.txt"&pause&exit
  3. {
  4.     if(length($0)>10){
  5.         str=substr($0,11,6);
  6.         arr[str]=arr[str]""substr($0,11);
  7.     }
  8. }
  9. END{ for(b in arr)print b"="arr[b]}
复制代码

TOP

  1. powershell -c "(gc '文本.txt'|%%{$_.SubString(11)})|group {$_.SubString(0,6)}|%%{$_.name+'='+-join($_.group)}"
  2. pause
复制代码

TOP

  1. //&cls&cscript -nologo -e:jscript "%~f0"<"文本.txt"&pause&exit
  2. var a = {};
  3. while(!WSH.StdIn.AtEndOfStream){
  4.     var str = WSH.StdIn.ReadLine();
  5.     if(!/^\s*$/.test(str)&&str.length>10){
  6.         t = str.substr(11,6);
  7.         if(!a[t])a[t]='';
  8.         a[t]+=str.substr(11);
  9.     }
  10. }
  11. for(var b in a)WSH.Echo(b+'='+a[b]);
复制代码

TOP

回复 3# 沸羊羊


    建议把这些需求更新到顶楼,方便大家查看。

TOP

建议把这些需求更新到顶楼,方便大家查看。

TOP

本帖最后由 idos 于 2016-9-13 20:48 编辑

回复 4# pcl_test


   这个代码的结果有点儿瑕疵,小小的完善了下
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in ('type 文本.txt') do (
  4. set a=%%i
  5. for /f "delims=" %%j in ("!a:~10,6!") do (
  6. set _%%j=!_%%j!!a:~10!
  7. )
  8. )
  9. (for /f "tokens=2 delims==" %%i in ('set _') do (
  10. echo %%i
  11. ))>完成.txt
  12. pause
复制代码
结果在完成.txt文本文件中

TOP

我也来个
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt
  3. pause & exit
  4. @end
  5. var arr = WSH.StdIn.ReadAll().replace(/^.{10}/mg, '').match(/[^\r\n]{6,}/g).sort();
  6. var s = ''; arr.push('');
  7. for(var i=0; i<arr.length-1; i++){
  8.     s += arr[i];
  9.     if(arr[i].substr(0,6)!=arr[i+1].substr(0,6)){ WSH.Echo(s); s = ''; }
  10. }
复制代码

TOP

返回列表