标题: [文本处理] [已解决]批处理在文本每一行内容后面/行尾插入/添加/加上指定字符串 [打印本页]
作者: lslkkda 时间: 2017-3-25 12:28 标题: [已解决]批处理在文本每一行内容后面/行尾插入/添加/加上指定字符串
在每一排数字后面 固定的位置加上“”00 sush ” 怎么弄个批处理文件一次处理完啊!! 附件已经上传了
作者: zuodx 时间: 2017-3-25 12:48
perl -lpe "$_ = $_ . ' 00 sush'" wj.txt >result.txt
作者: lslkkda 时间: 2017-3-25 13:18
回复 2# zuodx
大神!!把你这代码做成BAT格式批处理文件 还是不行啊 处理的文本文档是空的
作者: ShowCode 时间: 2017-3-25 13:20
回复 3# lslkkda
2楼是Perl脚本,Windows不安装Perl环境的话,是无法执行的。
作者: zuodx 时间: 2017-3-25 13:21
下perl,执行就行了
作者: zuodx 时间: 2017-3-25 13:22
不用什么bat ,直接把那一行复制到命令行就行了
作者: ShowCode 时间: 2017-3-25 13:24
- @echo off
- (for /f %%i in ('type "1.txt"') do (
- echo,%%i 00 sush
- ))>"2.txt"
复制代码
作者: cfwyy77_bat 时间: 2017-3-25 13:34
本帖最后由 cfwyy77_bat 于 2017-3-25 13:37 编辑
- for /f %%a in (1.txt) do (echo %%a 00 sush>>2.txt)
- pause
复制代码
这样貌似就可以了。
不过前面长度不一样 加入的位置就不固定了。
作者: lslkkda 时间: 2017-3-25 14:12
回复 8# cfwyy77_bat
这位大神的代码 倒是加入了“00 sush” 可惜后面位置不对啊
就是要求后面的格式 位置固定啊 不然没法用啊 有办法吗
作者: zuodx 时间: 2017-3-25 14:51
你要告诉从多少列开始加啊
作者: taofan712 时间: 2017-3-25 16:51
回复 9# lslkkda
复制粘贴七楼的代码,%%i 00 sush之间的空格,改成tab键。
作者: lslkkda 时间: 2017-3-25 18:40
回复 11# taofan712
搞定了!!感谢各位大神~~~~~
作者: /zhqsystem/zhq 时间: 2017-3-25 18:59
20位数字内有效,其他位数自己修改- for /l %%n in (0,1,300)do call set "#n=%%#n%% "
- for /f %%i in ('type "%~f1"')do (
- call set "$n= %%i"
- call set "$n=%%$n: =%%%%#n%%"
- call echo,%%$n:~0,20%% 00 sush
- )
复制代码
作者: 老刘1号 时间: 2017-3-25 19:45
本帖最后由 老刘1号 于 2017-3-25 19:48 编辑
回复 6# zuodx
哼哼,不用下载什么Perl,写2行Bat就完了
作者: 老刘1号 时间: 2017-3-25 19:53
回复 13# /zhqsystem/zhq
放着Tab不用……
作者: /zhqsystem/zhq 时间: 2017-3-25 21:03
回复 15# 老刘1号
一个TAB=8个字符,如果是1个字符永远不会与20个字符的对齐
作者: lslkkda 时间: 2017-3-25 21:55
又出问题了!!位置道是对了 但是还是用不了!!我看了下源文件数字后面的空格是退格键 按11楼方法改的空格是TAB键!跟源文件不一样 用不了啊。那位大神在看看 附件文件的前三排就是源文件!!
作者: 老刘1号 时间: 2017-3-25 22:06
回复 16# /zhqsystem/zhq
嘿嘿,这就是你的无知了
CMD和记事本对Tab都有对齐标准
不是简单的代表8个空格
要不怎么会有这个符号出现呢?
直接用空格代替好了~
作者: /zhqsystem/zhq 时间: 2017-3-25 22:19
回复 18# 老刘1号
1TAB键a
01234567890123456789TAB键a
这俩在记事本中不能体现TAB分离的整齐对齐视觉效果,添加两个又怕复制到excel导致被换列
只能加特定字符来处理
作者: 老刘1号 时间: 2017-3-25 22:20
回复 19# /zhqsystem/zhq
额,这个相差太悬殊……不管它
作者: lslkkda 时间: 2017-3-25 22:25
额~虽然不太懂你们说的什么意思 但我感觉我这问题是个疑难杂症!! 大神留个QQ或者加我QQ1417793009 我传整个源文件研究下!
作者: pcl_test 时间: 2017-3-25 22:50
回复 17# lslkkda
退格键是什么鬼?然而只是空格,13楼的试了吗
作者: Nsqs 时间: 2017-3-26 13:09
- powershell -command "foreach($i in Get-Content '1.txt'){[array]$s+=$i.PadRight(20)+'00'+' '+'sush'};$s|Set-Content 'n.txt'"
复制代码
一行
作者: Nsqs 时间: 2017-3-26 13:35
回复 15# 老刘1号
没那么简单,如果用tab的话,每行长短不一就会无法对齐
作者: 老刘1号 时间: 2017-3-26 18:21
回复 24# Nsqs
nonono,这就是你的无知了- 123342 tab 668866 Hollos U
- 12332 tab 6652 Holl H
- 7777777 Tab s Shwuadd N
-
- 超过8个字符串用多Tab对齐
-
- 1234567898765 Hollo
- 1234 Hollo
- 1 Hollo
- 66666666666666666666666666666666666666666 Hollo
复制代码
复制到记事本里,我还没见过Tab搞不了的
不超过8个字符就会自动对齐
长短不一的时候就计算长度,
除以8得到整数部分
2个字符串的除以8得到整数部分相差数+1补给短的
1个Tab补给长的
肯定对的齐齐的。。。
作者: lslkkda 时间: 2017-3-27 12:33
回复 13# /zhqsystem/zhq
用13楼提供的批处理文件做出来的结果格式是对的 ,跟源文件对比位置还是有差异,多了几个空格,如果能去掉多出来的空格 修改成跟源文件的“00 sush ”位置对齐 就能用了!!
作者: ShowCode 时间: 2017-3-27 12:42
回复 21# lslkkda
把原文件压缩上传到顶楼,我看一下。
作者: Nsqs 时间: 2017-3-27 12:45
回复 26# lslkkda - @powershell -command "foreach($i in Get-Content '1.txt'){[array]$s+=$i.PadRight(17)+'00'+''.PadRight(4)+'sush'};$s|Set-Content 'n.txt'"
复制代码
作者: lslkkda 时间: 2017-3-27 12:46
回复 27# ShowCode
好的!
作者: Nsqs 时间: 2017-3-27 13:50
回复 29# lslkkda
给你方法了居然还在纠结
作者: lslkkda 时间: 2017-3-27 16:00
回复 30# Nsqs
感谢感谢!测试成功 ,你发的这个批处理代码又快又准又能用 终于解决了我的大问题 。 :victory: :victory:
作者: lslkkda 时间: 2017-3-27 21:44
回复 28# Nsqs
还有个小问题 这个代码一次能处理多少啊 好像大于500K的文件就处理不了啊
作者: Nsqs 时间: 2017-3-27 22:46
本帖最后由 Nsqs 于 2017-3-28 15:59 编辑
- @powershell -c "[string]$f=((Get-Content -raw '1.txt')-replace '(\d+)',('$1'+''.PadRight(50)))-replace '(.{16}) +',('$1 '+'00'+''.PadRight(4)+'sush');[io.file]::WriteAllLines('n.txt',$f)"
复制代码
保存bat,490毫秒处理完800kb
作者: WHY 时间: 2017-3-28 09:46
本帖最后由 WHY 于 2017-3-28 16:55 编辑
- gawk "$0~/.+$/{s=\" \";len=17-length($0);for(i=1;i<len;i++)s=s\" \";$0=$0s\"00 sush\"};1" a.txt > b.txt
复制代码
- set "s=[IO.File]::ReadAllText('a.txt', [Text.Encoding]::Default)"
- PowerShell -c "[regex]::Replace(%s%, '[^\r\n]+', {param($m); $s=$m.Value; $s+' '*(17-$s.Length)+'00 sush'})" > b.txt
复制代码
- @if(0)==(0) echo off
- cscript //nologo //e:jscript "%~f0" < a.txt > b.txt
- pause & goto :EOF
- @end
-
- var sp = ' ';
- var s = WSH.StdIn.ReadAll().replace(/[^\r\n]+/g,function(s0){return (s0 + sp).substr(0, 17) + '00 sush'})
- WSH.Echo(s)
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |