Board logo

标题: [文本处理] 请教如何用for和if来实现文本截取和判断? [打印本页]

作者: 010603119    时间: 2008-9-17 19:40     标题: 请教如何用for和if来实现文本截取和判断?

现在有一组数据,格式如下:
zxcv,2
abcd,6
qwer,19
……
前面是一组字符串,中间是一个英文逗号,最后是另一个数字。可以看做是一个X,Y形式的数据


现在要求处理成这个样子:
zxcv
zxcv
abcd
abcd
abcd
abcd
qwer
qwer
qwer
qwer
……

呵呵,没看明白吧?简单解释一下:如果Y小于等于4,则将前面的字符串重复Y次,如果Y大于4,则将前面的字符串重复4次。然后将结果形成一个列表文件。

经过一段时间的研究,我写了如下的代码来实现:
for /f "tokens=2 delims=," %%i in (abc.txt) do (
if %%i LEQ 4 ( for /l %%j in (1,1,%%i) do echo %%j >> result.txt ) else ( for /l %%k in (1,1,4) do echo %%k >> result.txt)
)

第一行是将Y赋给参数i,第二行是判断Y是否小于等于4,如果是则将X重复Y次写入到result.txt中,否则将X重复4次写入result.txt中。但发现无论如何都不能成功,我死活也查不出原因,因此特来请教各位高手,麻烦指点一二,非常感谢!

[ 本帖最后由 010603119 于 2008-9-18 04:10 编辑 ]
作者: shqf    时间: 2008-9-17 19:58

根据原思路,尽量少修改如下:
  1. @echo off
  2. for /f "tokens=1,2 delims=," %%i in (abc.txt) do (
  3. if %%j LEQ 4 ( for /l %%k in (1,1,%%j) do echo %%i >> result.txt ) else (
  4. for /l %%k in (1,1,4) do echo %%i >> result.txt)
  5. )
复制代码

原代码问题在于第1、第2个FOR用了相同的变量名,还有X的值没有读入某个变量,导致不能写到新文件中去了。

[ 本帖最后由 shqf 于 2008-9-17 20:04 编辑 ]
作者: zqz0012005    时间: 2008-9-17 20:07

不会就干脆不要写!

别人看代码比写自己代码还累

if %%j LEQ 4 ( for /l %%a in (1,1,%%j) do echo %%i >> result.txt ) else ( for /l %%a in (1,1,4) do echo %%i >> result.txt)
作者: pusofalse    时间: 2008-9-17 20:55

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=," %%a in (a.txt) do (
  3.       if %%b leq 4 (set a=%%b) else set a=4
  4.       for /l %%i in (1 1 !a!) do echo %%a
  5. )>>result.txt
  6. start result.txt
复制代码

作者: 010603119    时间: 2008-9-17 21:30

非常感谢楼上各位的解答,具体效果一会我测试一下。

3楼的兄弟看来是个急性子啊。
作者: 010603119    时间: 2008-9-19 02:56

问题已解决,再次感谢楼上各位相助。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2