标题: [求助]统计字符串个数并以空格填充
[打印本页]
作者: hgx126
时间: 2009-5-18 11:48
标题: [求助]统计字符串个数并以空格填充
一文本文件,内容有多行,如下:
G001090161401,20031118
G47480000066706,20071108
G482700044863,20071026
G51293019641117001X,20070124
G88130123948484,20070919
G88130124226389,20070921
G88130124348,20070928
……
各行字符串个数不等,且都少于30。我现在要将各行字符数目统一为30个,并将其中的逗号去掉。字符不足30个的以空格填充,填充位置就是逗号所在位置。填充好后文本内容如下:
G001090161401 20031118
G47480000066706 20071108
G482700044863 20071026
G51293019641117001X 20070124
G88130123948484 20070919
G88130124226389 20070921
G88130124348 20070928
……
求一批处理,处理以上文本。
求大家相助。
谢谢
[
Last edited by hgx126 on 2009-5-18 at 11:52 ]
作者: terse
时间: 2009-5-18 12:33
@echo off&setlocal enabledelayedexpansion
set "k= "
(for /f "usebackq delims=" %%i in ("a.txt") do (
set "str=%%i"
for /l %%a in (1 1 29) do (
if not "!str:~%%a,1!"=="" set/a n=30-%%a)
call call echo.%%%%str:,=%%k:~,!n!%%%%%%
))>b.txt
pause
作者: zh159
时间: 2009-5-18 12:56
逗号后面的是固定的所以只要在逗号前补充空格截取就OK了
@echo off
for /f "tokens=1,2 delims=," %%i in (a.txt) do (
set "str=%%i "
call echo.%%str:~0,22%%%%j
)
pause
作者: hgx126
时间: 2009-5-18 13:26
谢谢两位。特别要感谢zh159兄提供的思路,太妙了。
再次感谢。
作者: hgx126
时间: 2009-5-20 13:43
另外,我还有个想法,要求每行字符也为30个,只是在每一行的行首加0填充,达到如下效果,又该如何处理:
000000000G00109016140120031118
0000000G4748000006670620071108
000000000G48270004486320071026
000G51293019641117001X20070124
0000000G8813012394848420070919
0000000G8813012422638920070921
0000000000G8813012434820070928
[
Last edited by hgx126 on 2009-5-20 at 13:44 ]
作者: jmz573515
时间: 2009-5-20 20:58
@echo off&setlocal enabledelayedexpansion
(for /f "tokens=1,2 delims=," %%i in (a.txt) do (set n=00000000000000000000000%%i%%j&&echo !n:~-30!))>#a.txt
作者: hgx126
时间: 2009-5-20 21:45
echo !n:~-30!?就是从最右边向左取30位?
作者: yishanju
时间: 2009-5-21 01:35
Quote: |
Originally posted by hgx126 at 2009-5-20 13:43:
另外,我还有个想法,要求每行字符也为30个,只是在每一行的行首加0填充,达到如下效果,又该如何处理:
000000000G00109016140120031118
0000000G474 ... |
|
嗯嗯,大家的思路代码都很精妙,顺着大家的思路利用FR来处理:
首先在每行前面补22个0
fr -ric:"^" -t:"00000000000000000000000" 1.txt
start 1.txt
pause
然后截取逗号前22个字符和后面所有字符
fr -ric:".*(.{22,22}),(.+)" -t:"\1\2" 1.txt
start 1.txt
pause
[
Last edited by yishanju on 2009-5-21 at 23:30 ]
作者: yishanju
时间: 2009-5-21 02:02
按一楼的处理。
逗号直接替换成N十个空格:
fr -ric:"," -t:" " 1.txt
从行首截取22个字符和后面的8个数字。
fr -ric:"^(.{22,22}).*(\d{8,8})" -t:"\1\2" 1.txt
FR 下载:http://baiy.cn/utils/fr/index.htm
[
Last edited by yishanju on 2009-5-21 at 04:08 ]