|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『楼 主』:
[求助]文本指定符号之间的字符替换
文本文件有上千行,每一行内容由英文的逗号分隔为5部分,例如:ab,f1,10000,10000,1000要求检测第二部分字符长度,大于4则提示出错并显示行号,判断第二部分的英文字母个数,如果有多个则只保留第一个,然后把此英文字母替换为数字,如果为a则换为101,为b则换为102,以此类推,如这里的f则换为106。补充,这里的英文不分大小写,可使用外部命令。
[ Last edited by cnxyc on 2010-12-4 at 14:27 ]
|
|
2010-12-4 14:13 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
2 楼』:
1,文本是否只包括数字,字母以及逗号?
2,提示错误需要输出到文本吗?
3,替换后将5部分数据写回到源文件?
4,z为126还是1026?
5,当字符大于4个时,是否也进行字符替换
6,第2部分的数据是否由“n个字码+n个数字”构成?还是字母和数字混在一起?
[ Last edited by Hanyeguxing on 2010-12-4 at 15:07 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-12-4 14:55 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
3 楼』:
谢谢hanyeguxing的热心提问!
谢谢hanyeguxing的热心提问!
1:文本只包括数字、字母以及逗号。
2:提示出错不需要输出到文件,只需要暂停等待用户响应然后终止程序。
3:替换后将5部分数据写到新文件,源文件保留。
4:这个问题是我疏忽了,对不起。这里如果为z则替换为126
5:当字符大于4时不进行替换,提示错误信息,显示行号,提示用户修改然后重新执行批处理。
6:第二部分数据有几种情况出现,1个字母,3个数字,1个字母加1个数字,4个数字。
|
|
2010-12-4 15:37 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
4 楼』:
@echo off
::设置源文件
set han=han.txt
::设置输出文件
set ye=ye.txt
::初始变量组
setlocal enabledelayedexpansion
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set/a xing+=1&set xing_=0!xing!&set #%%a=1!xing_:~-2!
::检查
for /f "tokens=1,3 delims=:," %%a in ('findstr /n .* "%han%"') do (
set xing=%%b
if not "!xing:~4,1!"=="" echo 错误行:%%a&pause&exit
)
::解析
for /f "usebackq tokens=1-5 delims=," %%a in ("%han%") do call:xing %%b %%a %%c %%d %%e
exit
:xing:替换并输出
setlocal enabledelayedexpansion
set xing=%1
for /l %%a in (0,1,3) do if not "!xing:~%%a,1!"=="" for %%b in (!xing:~%%a^,1!) do if "%%b" leq "9" (set gu=!gu!%%b) else if not defined set set gu=!gu!!#%%b!&set set==
>>"%ye%" echo %2,!gu!,%3,%4,%5
Endlocal [ Last edited by Hanyeguxing on 2010-12-4 at 17:52 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-12-4 17:14 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
5 楼』:
谢谢解答!
谢谢孤星的解答,如果我需要把英文字母转换为其他数字呢?就是转换过程不能用运算的方法,而是直接替换,比如现在想把
a转为107
b转为120
c转为166
因为下午在上班,没能及时回复,对不起啊。
|
|
2010-12-4 18:35 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
6 楼』:
修改:
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set/a xing+=1&set xing_=0!xing!&set #%%a=1!xing_:~-2! 部分,例如:
@echo off&setlocal enabledelayedexpansion
for %%a in (a51 b42 c74 d85 e99 f57 g19 h94 i59 j83 k64 l48 m62 n82 o15 p39 q20 r5224 s42 t61 u88 v47 w25 x50 y12 z94) do set a=%%a&set #!a:~0,1!=1!a:~-2! [ Last edited by Hanyeguxing on 2010-12-4 at 18:56 ]
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-12-4 18:47 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
7 楼』:
我是初学,没明白意思。
不好意思啊,初学。我把我现在要转换的贴出来,你帮忙改改代码。还有就是第一部分数据的长度不定,不过一般都在10位以下。以后要换其他转换数字我自己慢慢摸索吧。谢谢!
a转为166
b转为120
c转为654
d转为602
e转为922
f转为202
g转为904
h转为148
i转为610
j转为589
k转为921
l转为563
m转为248
n转为562
o转为357
p转为918
q转为750
r转为548
s转为181
t转为233
u转为919
v转为600
w转为677
x转为667
y转为220
z转为107
|
|
2010-12-4 19:19 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
8 楼』:
贴个示例
BG001,Z,100000.047,200000.581,1000.583
BG002,Z,104400.330,265000.458,1200.653
1000,B,107500.580,208500.068,1040.558
1001,B1,189500.588,255000.589,1100.583
1002,F,105840.584,268000.451,1060.483
1100,F1,102570.657,272000.471,1050.123
5,F2,108560.586,258980.571,1050.333
6,5482,100580.586,204570.541,1005.222
7,FF2021,55565.585,648555.444,1254.568
|
|
2010-12-4 19:40 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
|
2010-12-5 02:26 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
|
2010-12-5 12:10 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
11 楼』:
示例中最后一行第二部分数据是故意那样输的
示例中最后一行第二部分数据是故意那样输的,目的是测试批处理排错功能。
|
|
2010-12-5 12:14 |
|
|
Hanyeguxing
银牌会员
正在学习中的菜鸟...
积分 1039
发帖 897
注册 2009-3-1 来自 在地狱中仰望天堂
状态 离线
|
『第
12 楼』:
只对第二部分检查、替换:
@echo off&setlocal enabledelayedexpansion
set han=han.txt
set ye=ye.txt
for /f "delims=" %%a in ('more +17^<"%~fs0"') do set a=%%a&set #!a:~0,1!=!a:~-3!
for /f "tokens=1,3 delims=:," %%a in ('findstr /n .* "%han%"') do (
set xing=%%b
if not "!xing:~4,1!"=="" echo 错误行:%%a&pause&exit
)
for /f "usebackq tokens=1-5 delims=," %%a in ("%han%") do call:xing %%b %%a %%c %%d %%e
exit
:xing:替换并输出
setlocal enabledelayedexpansion
set xing=%1
for /l %%a in (0,1,3) do if not "!xing:~%%a,1!"=="" for %%b in (!xing:~%%a^,1!) do if "%%b" leq "9" (set gu=!gu!%%b) else if not defined set set gu=!gu!!#%%b!&set set==
>>"%ye%" echo %2,!gu!,%3,%4,%5
Endlocal
goto:eof
a166
b120
c654
d602
e922
f202
g904
h148
i610
j589
k921
l563
m248
n562
o357
p918
q750
r548
s181
t233
u919
v600
w677
x667
y220
z107
此帖被 +1 点积分 点击查看详情 评分人:【 cnxyc 】 | 分数: +1 | 时间:2010-12-7 01:17 |
|
|
批处理之家 http://bbs.bathome.net/forum-5-1.html |
|
2010-12-5 12:25 |
|
|
cnxyc
新手上路
积分 15
发帖 15
注册 2008-10-13
状态 离线
|
『第
13 楼』:
大哥,谢谢啦!
帮我大忙了,虽然感谢的话在这里显得很苍白,但我还是谢谢孤星大哥的热心!
|
|
2010-12-7 01:21 |
|