[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理找出文本里缺失数据并补充数据

工作中实际难题  为更好说明问题,做了修改
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开始。上例中 间隔 都是一个空格,为方便阅读理解做了排版。
我自己已尝试写了代码,可以找到缺失数据,但不能补充上一个操作者。麻烦给予帮助。谢谢。
目的,学习批处理

回复 6# qixiaobin0715
谢谢!
目的,学习批处理

TOP

本帖最后由 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
复制代码

TOP

第1条记录一般不会缺失吧,好像对第1条记录缺失不起作用。

TOP

回复 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
复制代码

TOP

本帖最后由 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
复制代码
当修改代码为如上时,已可克服同时少几行的情况。
目的,学习批处理

TOP

  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
复制代码
1

评分人数

    • hlzj88: 谢谢帮助+技术卓越技术 + 1
QQ 33892006

TOP

返回列表