Board logo

标题: [文本处理] [已解决]批处理找出文本里缺失数据并补充数据 [打印本页]

作者: 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

  1. @echo off&&setlocal enableDelayedExpansion
  2. for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 0.txt') do (
  3. set/a n+=1
  4. if !n! lss %%c echo;缺失第!n!条记录,上一个操作员是:!last_operator!
  5. set last_operator=%%e
  6. )
  7. pause
复制代码

作者: hlzj88    时间: 2021-5-25 20:00

本帖最后由 hlzj88 于 2021-5-25 20:38 编辑

回复 2# yhcfsr
首先谢谢!
试用出现的问题
1 当原文一行不差数据,显示除首尾行外的所有行都缺失
2
  1. @echo off&&setlocal enableDelayedExpansion
  2. set n=1
  3. for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
  4. set/a n+=1
  5.         set /a w=%%c-!n!
  6.        for /l %%j in (1,1,!w!) do echo;缺失第!n!条记录,上一个操作员是:!last_operator!&&set/a n+=1
  7. set last_operator=%%e
  8. )
  9. pause
复制代码
当修改代码为如上时,已可克服同时少几行的情况。
作者: qixiaobin0715    时间: 2021-5-26 11:01

回复 3# hlzj88
如果不止一处缺失记录,代码就需要修改:
  1. @echo off&&setlocal enableDelayedExpansion
  2. set n1=2
  3. for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
  4.     set/a n+=1
  5.     set /a n2=%%c-1
  6.     if !n1! leq !n2! echo;第!n!行下面缺失如下记录:&for /l %%j in (!n1!,1,!n2!) do echo;    第%%j条记录,上一个操作员是:!last_operator!
  7.     set /a n1=%%c+1
  8.     set last_operator=%%e
  9. )
  10. pause
复制代码

作者: qixiaobin0715    时间: 2021-5-26 12:53

第1条记录一般不会缺失吧,好像对第1条记录缺失不起作用。
作者: qixiaobin0715    时间: 2021-5-26 13:30

本帖最后由 qixiaobin0715 于 2021-5-26 13:50 编辑

修正后也能对付第1条记录缺失的情况。
  1. @echo off&&setlocal enableDelayedExpansion
  2. set n1=2
  3. for /f "tokens=1,2,3,4* delims= " %%a in ('more +1 1518800179.txt') do (
  4.     set/a n+=1
  5.     set /a n2=%%c-1
  6.     if %%b equ !m! (
  7.         if !n1! leq !n2! echo;第!n!行下面缺失如下记录:&for /l %%j in (!n1!,1,!n2!) do echo;    第%%j条记录,上一个操作员是:!last_operator!
  8.     ) else (
  9.         if %%c neq 1 echo;第!n!行下面缺失如下记录:&for /l %%j in (1,1,!n2!) do echo;    第%%j条记录,上一个操作员是:!last_operator!
  10.     )
  11.     set /a n1=%%c+1
  12.     set m=%%b
  13.     set last_operator=%%e
  14. )
  15. pause
复制代码

作者: hlzj88    时间: 2021-5-28 11:37

回复 6# qixiaobin0715
谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2