Board logo

标题: [求助]怎么查询并输出2个时间内的1段数据 [打印本页]

作者: li104268     时间: 2007-10-30 18:54    标题: [求助]怎么查询并输出2个时间内的1段数据

如题
请大家帮我写下
谢谢!!!
作者: li104268     时间: 2007-10-30 18:55
比如 2007年10月1日  到   2007年11月1日之间
作者: abcd     时间: 2007-10-30 19:57
贴段文本上来做范例吧
作者: li104268     时间: 2007-10-30 20:54
序列号     订单     用户        出厂日期               维修日期               完结日期      
de23422    13321    王学兵  2006年6月18日    2007年3月28日    2007年4月10日
fa22578    18032    李雪       2006年8月5日     2007年4月20日    2007年4月29日
。。。。。
。。。。。
。。。。。
ke23089    52108    赵广辉     2007年1月5日                                          
le58212    32102    张耀峰     2007年1月5日    2007年10月20    2007年10月28日


格式就是这样,查询 2007年10月20日 到 2007年4月20日 中间的记录
作者: abcd     时间: 2007-10-30 21:35
就是根据“维修日期”来判断罗
作者: li104268     时间: 2007-10-30 21:48
是的,只是这个表达式想不出该杂写,还望大家不吝赐教!!!
作者: 26933062     时间: 2007-10-30 23:53

@echo off
echo 请输入起始日期 如:2007-3-29
set /p d=
echo 请输入结束日期 如:2007-4-29
set /p h=
set /p var=<a.txt
cls
echo %var%
setlocal EnableDelayedExpansion
for /f "delims=" %%i in (a.txt) do (
for /f "tokens=5 delims= " %%a in ("%%i") do (
  if not "%%a"=="" (
  set num=%%a
  set num=!num:年=-!
  set num=!num:月=-!
  set num=!num:日=!
  if !num! geq !d! if !num! leq !h! echo %%i
  )))
pause
[ Last edited by 26933062 on 2007-10-30 at 11:55 PM ]
作者: junchen2     时间: 2007-10-31 00:55
echo off
@for /f "tokens=1-6 delims=: " %%a in ('findstr /n " 2007年4月20日 " 111.txt') do (
if "%%f" == "2007年4月20日" set n=%%a& goto 2
)
:2
@for /f "tokens=1-6 delims=: " %%a in ('findstr /n " 2007年10月20 " 111.txt') do (
if "%%f" == "2007年10月20" set n1=%%a& goto 3
)
:3
sed -n "%n%,%n1%p" 111.txt|more>>fix_date.txt
pause

[ Last edited by junchen2 on 2007-10-31 at 01:07 AM ]
作者: junchen2     时间: 2007-10-31 01:25
不知道仅用SED能否写出

[ Last edited by junchen2 on 2007-10-31 at 01:39 AM ]
作者: lxmxn     时间: 2007-10-31 04:52
试试这个:

  Quote:
sed "/^\([^[:space:]]\+[[:space:]]\+\)\{4\}2007年4月20.*/,/^\([^[:space:]]\+[[:space:]]\+\)\{4\}2007年10月20.*/!d" UrTestFile.txt|sed "1d;$d"

[ Last edited by lxmxn on 2007-10-31 at 04:55 AM ]
作者: junchen2     时间: 2007-10-31 08:50
用lxmxn兄的代码试了一下好用。谢谢!

[ Last edited by junchen2 on 2007-10-31 at 08:52 AM ]
作者: li104268     时间: 2007-10-31 10:02
多谢大家:D
只是版主那个看不懂:(
作者: li104268     时间: 2007-10-31 10:32


  Quote:
Originally posted by 26933062 at 2007-10-30 11:53 PM:
[code]
@echo off
echo 请输入起始日期 如:2007-3-29
set /p d=
echo 请输入结束日期 如:2007-4-29
set /p h=
set /p var=<a.txt
cls
echo %var%
setlocal EnableDelayedExpansion
...

文档中某些记录有3个日期,因此查出来的结果有点乱:(

比如查2006年10月20日 到2007年8月20日,结果 除了第3条都显示出来了
作者: abcd     时间: 2007-10-31 11:10
7楼写的是有问题的

例如:
set a=2007-4-21
set b=2007-10-21
if %a% lss %b% (echo yes) else echo no
pause

作者: li104268     时间: 2007-10-31 11:36


  Quote:
Originally posted by junchen2 at 2007-10-31 12:55 AM:
echo off
@for /f "tokens=1-6 delims=: " %%a in ('findstr /n " 2007年4月20日 " 111.txt') do (
if "%%f" == "2007年4月20日" set n=%%a& goto 2
)
:2 ...

sed /? 提示不是内部或外部命令。。。
这个命令是什么?
这个批处理在我机器上无结果:(
作者: abcd     时间: 2007-10-31 12:26
sed是第三方命令行工具

需要下载的,论坛似乎是有的,楼主自己搜索一下
作者: li104268     时间: 2007-10-31 12:55


  Quote:
Originally posted by abcd at 2007-10-31 12:26 PM:
sed是第三方命令行工具

需要下载的,论坛似乎是有的,楼主自己搜索一下

知道了,谢谢你提醒

我想知道能不能不借住第三方工具把它作出来
作者: abcd     时间: 2007-10-31 13:30
当然是可以实现的,不过效率很明显没有sed高的

有时候不要这么执着于非用windows自带命令不可

处理文本不就是为了效率吗?

如果纯研究的话,倒是可以去写,如果只是单纯的提高处理文本的速度的话

不妨考虑第三方工具
作者: li104268     时间: 2007-10-31 14:25


  Quote:
Originally posted by abcd at 2007-10-31 01:30 PM:
当然是可以实现的,不过效率很明显没有sed高的

有时候不要这么执着于非用windows自带命令不可

处理文本不就是为了效率吗?

如果纯研究的话, ...

1为处理文档,2位学习。学习一下高人的逻辑思维,提高自己能力:P
希望有人帮写出纯ms-dos代码:)
作者: abcd     时间: 2007-10-31 14:58

@echo off

for /f "skip=1 tokens=1-6" %%i in (t.txt) do (
  set dt=%%m
  setlocal enabledelayedexpansion
  set dt=!dt:年= !
  set dt=!dt:月= !
  set dt=!dt:日=!
  call :ys "!dt!"
  if "!string:~1!" gtr "2007-04-20" if "!string:~1!" lss "2007-10-20" echo %%i  %%j  %%k  %%l  %%m  %%n
  endlocal
)
pause
goto :eof

:ys
set string=
for %%a in (%~1) do (
   if %%a leq 9 (set str=0%%a) else (set str=%%a)
   set string=!string!-!str!
)
试试这个??
作者: 26933062     时间: 2007-10-31 17:20
这样就可以了
::
@echo off
setlocal EnableDelayedExpansion
echo 请输入起始日期 如:2007 3 29
set /p d=
call :lis "%d%" d
echo 请输入结束日期 如:2007 10 9
set /p h=
call :lis "%h%" h
set /p var=<a.txt
cls
echo %var%
for /f "delims=" %%i in (a.txt) do (
for /f "tokens=5 delims= " %%a in ("%%i") do (
  if not "%%a"=="" (
  set num=%%a
  set num=!num:年=-!
  set num=!num:月=-!
  set num=!num:日=!
  call :lis "!num!" num
  if !num! geq !d! if !num! leq !h! echo %%i
)))
pause
exit
:lis
for /f "tokens=1-3 delims=- " %%a in ("%~1") do (
  set m=0%%b
  set yy=0%%c
  set %2=%%a-!m:~-2!-!yy:~-2!
)
goto :eof