标题: [文本处理] [已解决]给每行加上标点并使其对齐的批处理 [打印本页]
作者: rustnail 时间: 2009-8-9 00:56 标题: [已解决]给每行加上标点并使其对齐的批处理
如有下面不同长度的文字,要给每行结尾都加上逗号,且逗号对齐,如何写bat.谢谢!
输入:
asdgasdgd
asdfasdgsdgag
asdgsg
输出:
asdgasdgd ,
asdfasdgsdgag,
asdgsg ,
[ 本帖最后由 rustnail 于 2009-8-9 14:29 编辑 ]
作者: batman 时间: 2009-8-9 01:15
如果知道最长字符数,如:最长字符为20个就很好处理:- @echo off&setlocal enabledelayedexpansion
- for /l %%a in (1,1,20) do set "k=!k! "
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a%k%"
- echo !str:~,20!,>>new.txt
- )
- start new.txt
复制代码
作者: rustnail 时间: 2009-8-9 01:28
谢谢!
希望逗号能够紧跟在最长的一列后面,而不是固定在某一列。呵呵
作者: rustnail 时间: 2009-8-9 01:31
呵呵,感谢提供了很好的思路,现在只要取出最长的列号就可以了
作者: batman 时间: 2009-8-9 01:45
如果不知道最长字符数,就要先获取最长字符数,这就麻烦点了:- @echo off&setlocal enabledelayedexpansion
- echo a>>a.txt&set /a max=0
- for /f "delims=:" %%a in ('findstr /o .* a.txt') do (
- set /a b=a,a=%%a,c=a-b-2
- if !max! leq !c! set /a max=c
- )
- for /l %%a in (1,1,%max%) do set "k=!k! "
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a%k%"
- echo !str:~,%max%!,>>new.txt
- )
- start new.txt
复制代码
作者: batman 时间: 2009-8-9 01:51
还可以不要改动原文件,但代码就难懂点了:- @echo off&setlocal enabledelayedexpansion
- set /a max=0
- for /f "delims=:" %%a in ('^(type a.txt^&echo a^)^|findstr /o .*') do (
- set /a b=a,a=%%a,c=a-b-2
- if !max! leq !c! set /a max=c
- )
- for /l %%a in (1,1,%max%) do set "k=!k! "
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a%k%"
- echo !str:~,%max%!,>>new.txt
- )
- start new.txt
复制代码
作者: rustnail 时间: 2009-8-9 01:52
找max column number的另外一种方法
awk "length>max{max=length}END{print max}" a.txt
作者: rustnail 时间: 2009-8-9 01:52
呵呵,已经不是批处理了
作者: batman 时间: 2009-8-9 02:16
问题得到解决后,请楼主主动在标题上加注[已解决]字样,谢谢。
作者: rustnail 时间: 2009-8-9 03:46
原帖由 batman 于 2009-8-9 01:15 发表
如果知道最长字符数,如:最长字符为20个就很好处理:@echo off&setlocal enabledelayedexpansion
for /l %%a in (1,1,20) do set "k=!k! "
for /f "delims=" %%a in (a.txt) do (
set "str=%%a%k%"
ech ...
还是有点问题:为什么会有!k!?
iojoj!k! ,
llgajslg!k,
lasjdglasj,
ljgas!k! ,
gsdfh!k! ,
lasdhglsjg,
fasdgtt!k!,
fjdfj!k! ,
qawq!k! ,
sdfghsdh!k,
segsegs!k!,
gdfgd!k! ,
dhgd!k! ,
作者: rustnail 时间: 2009-8-9 04:00
双击执行没有问题,但是cmd执行就不行了
作者: terse 时间: 2009-8-9 12:38
修改下 batman兄 6楼代码
用最大行字数减当前行字数 处理怎么样
另type 改为 more 省了最后行问题- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%i in ('"(more "a.txt"&echo;)|findstr /o .*"') do (
- set /a n=%%i-2-m,m=%%i
- if !n! gtr !c! set c=!n!
- if defined var set _!l!=!var!&set l!l!=!n!
- if not "%%j"=="" (set "var=%%j"&set/a l+=1)else set "var="
-
- )
- for /l %%a in (1,1,%c%) do set "k=!k! "
- (for /l %%a in (1,1,%l%) do (
- set /a m=c-l%%a
- if "!_%%a!" neq "" for %%b in (!m!) do echo !_%%a!!k:~,%%b!,
- ))>new.txt
- start new.txt
复制代码
[ 本帖最后由 terse 于 2009-8-9 12:53 编辑 ]
作者: rustnail 时间: 2009-8-9 14:29
谢谢大家!谢谢大家!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |