[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请教如何用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 编辑 ]

根据原思路,尽量少修改如下:
  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 编辑 ]

TOP

不会就干脆不要写!

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

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)
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

  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
复制代码
心绪平和,眼藏静谧。

TOP

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

3楼的兄弟看来是个急性子啊。

TOP

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

TOP

返回列表