Board logo

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

作者: 沸羊羊    时间: 2016-9-13 09:13     标题: 根据文本每一行指定位置的相同字符串将该行从指定位置到行尾截取的字符串合并成一行

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

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

作者: codegay    时间: 2016-9-13 10:19

说人话是去重后合并成一行?
作者: 沸羊羊    时间: 2016-9-13 11:00

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

截取后,拼接,生成为:0023760000啊啊0023760001啊啊30023760001啊啊的
作者: pcl_test    时间: 2016-9-13 13:26

本帖最后由 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
复制代码

作者: pcl_test    时间: 2016-9-13 13:51

  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]}
复制代码

作者: pcl_test    时间: 2016-9-13 14:09

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

作者: pcl_test    时间: 2016-9-13 15:54

  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]);
复制代码

作者: GNU    时间: 2016-9-13 18:43

回复 3# 沸羊羊


    建议把这些需求更新到顶楼,方便大家查看。
作者: hua056    时间: 2016-9-13 20:15

建议把这些需求更新到顶楼,方便大家查看。
作者: idos    时间: 2016-9-13 20:44

本帖最后由 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文本文件中
作者: WHY    时间: 2016-9-14 19:08

我也来个
  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. }
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2