Board logo

标题: [文本处理] 文本每行开头结尾添加 数据很多 几百万??快速?bat? [打印本页]

作者: idc878787    时间: 2023-8-26 23:14     标题: 文本每行开头结尾添加 数据很多 几百万??快速?bat?

文本每行开头结尾添加  数据很多 几百万??快速?bat?
作者: Five66    时间: 2023-8-27 01:53

不知,下面,代码,行否?
  1. @echo off
  2. set distart=每行开头添加的内容
  3. set diend=每行结尾添加的内容
  4. set "difile=文件名或文件路径"
  5. rem 执行后输出生成的文件名为aaaaaa.aaaaaa
  6. (for /f "delims=" %%a in ('findstr /n .* %difile%') do (
  7.     set "str=%%a"
  8. set "a=%distart%"
  9. set "b=%diend%"
  10.     setlocal enabledelayedexpansion
  11.     echo,!a!!str:*:=!!b!
  12.     endlocal
  13. ))>aaaaaa.aaaaaa
  14. pause&exit/b
复制代码

作者: Five66    时间: 2023-8-27 01:56

啊,添加的内容和文件改成自己需要的,最好都都都不要有特殊字符
作者: 77七    时间: 2023-8-27 02:29

本帖最后由 77七 于 2023-8-27 03:15 编辑

回复 2# Five66


   
不保留空行使用批处理还行。使用for /f (findstr)很慢。
作者: 77七    时间: 2023-8-27 03:20

使用临时文件,应该快点。
  1. @echo off
  2. rem str1 str2 如果不含特殊符号,直接修改就行
  3. findstr /n .* 1.txt > $
  4. (for /f "useback tokens=1* delims=:" %%a in ("$") do (
  5. if "%%b" neq "" (
  6. echo str1%%bstr2
  7. ) else (
  8. echo=
  9. )
  10. ))>2.txt
  11. del $
  12. pause
复制代码

作者: idc878787    时间: 2023-8-27 07:50

使用临时文件,应该快点。
77七 发表于 2023-8-27 03:20



  有没有更快的方式?这个有也是慢?
作者: idc878787    时间: 2023-8-27 07:50

不知,下面,代码,行否?
Five66 发表于 2023-8-27 01:53



      有没有更快的方式?这个有也是慢?
作者: pd1    时间: 2023-8-27 09:07

快和慢都是相对的,你可以给一个量化的指标,比如一百万行几秒内
作者: buyiyang    时间: 2023-8-27 09:29

  1. gawk "{print(NF?\"开头添加\"$0\"结尾添加\":\"\")}" 1.txt > 2.txt
复制代码

作者: Five66    时间: 2023-8-27 16:12

这样应该快很多吧
  1. @if (0)//==(0)// echo off&pause&cscript //nologo -e:jscript "%~f0"&pause&exit
  2. @end
  3. //修改下面英文双引号里面的内容为自己需要的
  4. var distart="每行开头添加的内容";
  5. var diend="每行结尾添加的内容";
  6. var difile="文件名或文件路径";//路径使用双反斜杠\\
  7. var dienc="gb2312";//文件编码
  8. var diotf="输出的文件名或路径";//路径使用双反斜杠\\
  9. //=========================
  10. var inf=new ActiveXObject('adodb.stream');
  11. var otf=new ActiveXObject('adodb.stream');
  12. inf.Type=2;inf.Charset=dienc;inf.Open();
  13. inf.LoadFromFile(difile);inf.Position=0;
  14. otf.Type=2;otf.Charset=dienc;otf.Open();
  15. while(!inf.EOS)
  16. {
  17. otf.WriteText(distart);
  18. otf.WriteText(inf.ReadText(-2),0);
  19. otf.WriteText(diend+"\r\n");
  20. }
  21. otf.SaveToFile(diotf,2);
  22. inf.Close();otf.Close();
复制代码

作者: czjt1234    时间: 2023-8-27 16:15

要速度快还是推荐第三方程序,比如9楼的gawk
作者: idc878787    时间: 2023-8-27 16:35

回复 9# buyiyang


    谢谢   这个好
作者: qixiaobin0715    时间: 2023-8-28 10:10

本帖最后由 qixiaobin0715 于 2023-8-28 15:28 编辑

按照4楼所说,如果每行前后分别添加a、b,忽略空行输出,不考虑第三方,若使用纯P,最简单也是最快的方法:
  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do echo,a%%ib)>b.txt
  3. pause
复制代码

作者: Batcher    时间: 2023-8-28 22:28

回复 1# idc878787


推荐使用第三方命令行工具 sed.exe
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. sed "s/^/开头添加/;s/$/结尾添加/" 1.txt > 2.txt
复制代码





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