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

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

文本每行开头结尾添加  数据很多 几百万??快速?bat?

不知,下面,代码,行否?
  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
复制代码

TOP

啊,添加的内容和文件改成自己需要的,最好都都都不要有特殊字符

TOP

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

回复 2# Five66


   
不保留空行使用批处理还行。使用for /f (findstr)很慢。
bat小白,请多指教!谢谢!

TOP

使用临时文件,应该快点。
  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
复制代码
bat小白,请多指教!谢谢!

TOP

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



  有没有更快的方式?这个有也是慢?

TOP

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



      有没有更快的方式?这个有也是慢?

TOP

快和慢都是相对的,你可以给一个量化的指标,比如一百万行几秒内

TOP

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

TOP

这样应该快很多吧
  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();
复制代码

TOP

要速度快还是推荐第三方程序,比如9楼的gawk

QQ 20147578

TOP

回复 9# buyiyang


    谢谢   这个好

TOP

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

TOP

回复 1# idc878787


推荐使用第三方命令行工具 sed.exe
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. sed "s/^/开头添加/;s/$/结尾添加/" 1.txt > 2.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表