Board logo

标题: 如何用for 指定文件内容读取次数与定位? [打印本页]

作者: peterdocter     时间: 2007-3-16 23:45    标题: 如何用for 指定文件内容读取次数与定位?

每次取三个内容进行逻辑比较,行就退出不行就继续!
如:1-100,每次比较完不能重复!这只是一个例子,实际是从文件中提取的所以长度之前是不知道!

[ Last edited by peterdocter on 2007-3-17 at 01:40 AM ]
作者: peterdocter     时间: 2007-3-16 23:46
bat中有没有数组功用?我是说CMD批处理!

[ Last edited by peterdocter on 2007-3-16 at 11:51 PM ]
作者: NaturalJ0     时间: 2007-3-17 00:11
意思没明白
例子没看懂
BAT 没有直接提供数组功能,也许你可以自己写个出来用用。
作者: peterdocter     时间: 2007-3-17 01:12
就是这样
test.txt:
1
2
3
4
5
6
7
8
9
10
...
从test.txt中先取三个数字
1
2
3
进行逻辑比较if之类,通过就跳循环否则就继续
再从test.txt再提取后面三个数字
4
5
6
一直到合乎逻辑判断或者test.txt的内容全部比较完为止。
就是一句话:“满足条件就停止,不足就继续到用完为止而且每次判断的内容不能重复!”
如果支持数组就很好办,只要对此数组变量进行循环与逻辑判断不用再读取文件就不会有重复内容的出现。就是不知道如何在CMD做到相当于此功能,把所有内容一次性全部读出来进行逻辑判断?
作者: vkill     时间: 2007-3-17 01:14
还是用 sed 好了
作者: vkill     时间: 2007-3-17 01:14
你连你的要求都没有说清楚
作者: electronixtar     时间: 2007-3-17 01:32
根不用说模糊的题目了
作者: peterdocter     时间: 2007-3-17 01:34
sed 只是文件处理工具吗?
现在的问题这个for命令如何写了?是用到嵌套吗?
我想就应该是两个for语句
第一个for用于文件读取
第二个for用于逻辑比较 if xxx = ??? && goto exit_it
就是不知道如何实现每次取三个内容进行比较不合乎就继续,再取三个内容再进行比较直到合乎或没有内容时就退出!现在最大问题也就是每次取三个内容,而且要过滤重复的内容就是之前用过1,2,3再比较时4,6,5....

[ Last edited by peterdocter on 2007-3-17 at 01:36 AM ]
作者: vkill     时间: 2007-3-17 01:48


  Quote:
Originally posted by peterdocter at 2007-3-17 01:34:
sed 只是文件处理工具吗?
现在的问题这个for命令如何写了?是用到嵌套吗?
我想就应该是两个for语句
第一个for用于文件读取
第二个for用于逻辑比 ...

set n=0
:loop
for /f "skip=n ........

set/a n+=1
if ... goto end
goto loop
:end


剩下的自己写了
作者: youxi01     时间: 2007-3-17 02:24
试下以下代码看是否能满足你的要求:
@echo off
setlocal enabledelayedexpansion

set/a T=0
for /l %%i in (1 1 100) do (
   set flag=!T!
   echo 每三行的内容:
   call :ReadFile !T!
   echo.
   pause>nul
   if !Flag! EQU !T! echo 文件读完了 & pause>nul & goto :eof
)

pause>nul

:ReadFile
set/a T=%1
if %T% equ 0 (set "CMDLine=delims=") else set "CMDLine=skip=%T% delims="
for /f "%CMDLine%" %%i in (test.txt) do (
   set/a T+=1
   echo %%i
   set/a flag=!T! %% 3
   if !flag! EQU 0 goto :eof
)

作者: peterdocter     时间: 2007-3-17 07:15


  Quote:
Originally posted by youxi01 at 2007-3-17 02:24 AM:
试下以下代码看是否能满足你的要求:

[code]
@echo off
setlocal enabledelayedexpansion

set/a T=0
for /l %%i in (1 1 100) do (
   set flag=!T!
   echo 每三行的内容:
...

多谢了!不过有一点不美的就是自动限制文件最后长度或叫行数!不过非常多谢你,原来延迟变量还是可以这样用!:lol: