找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23786|回复: 6

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

[复制链接]
发表于 2021-5-25 14:55:39 | 显示全部楼层 |阅读模式
工作中实际难题  为更好说明问题,做了修改
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开始。上例中 间隔 都是一个空格,为方便阅读理解做了排版。
我自己已尝试写了代码,可以找到缺失数据,但不能补充上一个操作者。麻烦给予帮助。谢谢。
发表于 2021-5-25 17:44:34 | 显示全部楼层
  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技术 +1 收起 理由
hlzj88 + 1 谢谢帮助+技术卓越

查看全部评分

 楼主| 发表于 2021-5-25 20:00:19 | 显示全部楼层
本帖最后由 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
复制代码
当修改代码为如上时,已可克服同时少几行的情况。
发表于 2021-5-26 11:01:52 | 显示全部楼层
回复 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
复制代码
发表于 2021-5-26 12:53:50 | 显示全部楼层
第1条记录一般不会缺失吧,好像对第1条记录缺失不起作用。
发表于 2021-5-26 13:30:55 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2021-5-28 11:37:01 | 显示全部楼层
回复 6# qixiaobin0715
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 17:25 , Processed in 0.031946 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表