标题: [求助]怎么查询并输出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