标题: [文本处理] [已解决]批处理找出文本里缺失数据并补充数据 [打印本页]
作者: hlzj88 时间: 2021-5-25 14:55 标题: [已解决]批处理找出文本里缺失数据并补充数据
工作中实际难题 为更好说明问题,做了修改
ID 住院次数 序号 时间 操作员
1518800 1 1 31-Jul-20 889
1518800 1 2 31-Jul-20 975
1518800 1 3 31-Jul-20 975
1518800 1 4 31-Jul-20 975
1518800 1 7 31-Jul-20 1015
1518800 2 1 31-Jul-20 889
1518800 2 2 31-Jul-20 975
1518800 2 3 31-Jul-20 975
1518800 2 4 31-Jul-20 975
1518800 2 5 31-Jul-20 1015
实际数据情况如上 缺失一行或几行内容,但物理显示没有空行。
数据如上,序号依次增加,现大量数据需找出缺失的数据,同时依据时间相近可能是上一条数据的操作者删除了数据,大概模拟出操作者进行数据分析。
解读信息,ID1518800患者的第一次住院信息中第6条缺失,可能是第5条信息的操作者1015所为。
实际文本相当大,是多个病人的数据,同一病人也可能多次住院,每次都是序号从1开始。上例中 间隔 都是一个空格,为方便阅读理解做了排版。
我自己已尝试写了代码,可以找到缺失数据,但不能补充上一个操作者。麻烦给予帮助。谢谢。
作者: yhcfsr 时间: 2021-5-25 17:44
- @echo off&&setlocal enableDelayedExpansion
- for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 0.txt') do (
- set/a n+=1
- if !n! lss %%c echo;缺失第!n!条记录,上一个操作员是:!last_operator!
- set last_operator=%%e
- )
- pause
复制代码
作者: hlzj88 时间: 2021-5-25 20:00
本帖最后由 hlzj88 于 2021-5-25 20:38 编辑
回复 2# yhcfsr
首先谢谢!
试用出现的问题
1 当原文一行不差数据,显示除首尾行外的所有行都缺失
2- @echo off&&setlocal enableDelayedExpansion
- set n=1
- for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
- set/a n+=1
- set /a w=%%c-!n!
- for /l %%j in (1,1,!w!) do echo;缺失第!n!条记录,上一个操作员是:!last_operator!&&set/a n+=1
- set last_operator=%%e
- )
- pause
复制代码
当修改代码为如上时,已可克服同时少几行的情况。
作者: qixiaobin0715 时间: 2021-5-26 11:01
回复 3# hlzj88
如果不止一处缺失记录,代码就需要修改:- @echo off&&setlocal enableDelayedExpansion
- set n1=2
- for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
- set/a n+=1
- set /a n2=%%c-1
- if !n1! leq !n2! echo;第!n!行下面缺失如下记录:&for /l %%j in (!n1!,1,!n2!) do echo; 第%%j条记录,上一个操作员是:!last_operator!
- set /a n1=%%c+1
- set last_operator=%%e
- )
- pause
复制代码
作者: qixiaobin0715 时间: 2021-5-26 12:53
第1条记录一般不会缺失吧,好像对第1条记录缺失不起作用。
作者: qixiaobin0715 时间: 2021-5-26 13:30
本帖最后由 qixiaobin0715 于 2021-5-26 13:50 编辑
修正后也能对付第1条记录缺失的情况。- @echo off&&setlocal enableDelayedExpansion
- set n1=2
- for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
- set/a n+=1
- set /a n2=%%c-1
- if %%b equ !m! (
- if !n1! leq !n2! echo;第!n!行下面缺失如下记录:&for /l %%j in (!n1!,1,!n2!) do echo; 第%%j条记录,上一个操作员是:!last_operator!
- ) else (
- if %%c neq 1 echo;第!n!行下面缺失如下记录:&for /l %%j in (1,1,!n2!) do echo; 第%%j条记录,上一个操作员是:!last_operator!
- )
- set /a n1=%%c+1
- set m=%%b
- set last_operator=%%e
- )
- pause
复制代码
作者: hlzj88 时间: 2021-5-28 11:37
回复 6# qixiaobin0715
谢谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |