中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-20 16:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]统计字符串个数并以空格填充 查看 797 回复 8
楼 主 [求助]统计字符串个数并以空格填充 发表于 2009-05-18 11:48 ·  中国 四川 成都 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
一文本文件,内容有多行,如下:

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 ]
2 发表于 2009-05-18 12:33 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线

@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yishanju +11 2009-05-21 01:49
简单!简单!再简单!
3 发表于 2009-05-18 12:56 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
逗号后面的是固定的所以只要在逗号前补充空格截取就OK了
@echo off
for /f "tokens=1,2 delims=," %%i in (a.txt) do (
set "str=%%i "
call echo.%%str:~0,22%%%%j
)
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yishanju +11 2009-05-21 01:49
4 发表于 2009-05-18 13:26 ·  中国 四川 成都 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
谢谢两位。特别要感谢zh159兄提供的思路,太妙了。
再次感谢。
5 发表于 2009-05-20 13:43 ·  中国 四川 成都 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
另外,我还有个想法,要求每行字符也为30个,只是在每一行的行首加0填充,达到如下效果,又该如何处理:

000000000G00109016140120031118
0000000G4748000006670620071108
000000000G48270004486320071026
000G51293019641117001X20070124
0000000G8813012394848420070919
0000000G8813012422638920070921
0000000000G8813012434820070928


[ Last edited by hgx126 on 2009-5-20 at 13:44 ]
6 发表于 2009-05-20 20:58 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线

@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yishanju +11 2009-05-21 01:50
7 发表于 2009-05-20 21:45 ·  中国 天津 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
echo !n:~-30!?就是从最右边向左取30位?
8 发表于 2009-05-21 01:35 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
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 ]

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
9 发表于 2009-05-21 02:02 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
按一楼的处理。
逗号直接替换成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 ]

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
论坛跳转: