在x个章程后添加新行(修复损坏的文件)



我有一个来自数据日志的文本文件,该文件应该是数据行,用空格填充,每行197个字符长,以LF结尾。一些LF丢失了,所以下一行与上一行相连。例如,第1行很好,第2行缺少LF,因此第3行与之相连(还有几行!(:

IO.Unit._1.BottomBoard.Iin._1.AmpsA                                             ,Current A Pump 1                        ,29,57.80                                   ,0001641474794.344049,0000356036
PumpControl.Pump._1.PumpReverse.Reversing                                       ,Pump 1 Reversing                        ,28,2875                                    ,0001641474794.026816,0000356035Faults.Pump._1.ThermalOverload.Status.Active                                    ,Pump 1 Tripped                          ,24,1                                       ,0001641474793.000000,0000356034Faults.Pump._1.NotInAuto.Status.Active                                          ,Pump 1 Unavailable                      ,24,1                                       ,0001641474793.000000,0000356033Faults.Pump._1.Flow.LowFlowFault.Status.Active                                  ,Pump 1 Low Flow                         ,24,2                                       ,0001641474792.000000,0000356032Faults.Pump._1.Flow.LowFlowFault.Status.Active                                  ,Pump 1 Low Flow                         ,24,4                                       ,0001641474792.000000,0000356031Faults.Pump._1.Flow.LowFlowFault.Status.Active                                  ,Pump 1 Low Flow                         ,24,3                                       ,0001641474734.000000,0000355950IO.Unit._1.BottomBoard.Iin._1.AmpsB                                             ,Current B Pump 1                        ,29,0.00                                    ,0001641474724.555403,0000355949

有没有一种简单的方法可以找到字符198何时不是LF,并插入LF?我已经在NotePad++中尝试过RegEx搜索/替换:

查找:(.{197}!\r(

替换为:$1\r\n

这不会返回任何命中。如果我没有!r,它会查找每一行(因为它们都是197个字符长(。

我一直在手动添加LF,但我想我有几千条这样的线。。。就在这个文件里!!所以我真的很想把它自动化。

我可以使用RegEx:

查找:(.{197}(

替换为:$1\r\n

但这会附加到每一行。我可以使用NotePad++删除空行,但我想知道是否有更聪明的方法。

谢谢你的帮助!

如注释所述,使用实际的编程语言将比regex更可靠。然而,如果您不能使用编程语言,这里有一个regex应该可以工作。

(.{197})(?!(?:r|n))

演示

(.{197})      - Grab the first 197 characters of the line
(?!(?:r|n)) - negative lookahead. If the 198th character is a n or r it won't match

锚定问题

正则表达式没有锚定在行的开头,并且从开头开始计算197个字符。如果你想从行的开头锚定并捕获行中的所有记录,你需要做这样的事情:

^(?:(.{197})(?!(?:r|n))){1,}

使用这个版本的问题是重复组语法CCD_;替换";正则表达式。

只需更改您的"查找";regex到(可选(匹配尾部换行序列:

Find: (.{197})(rn)?
Replace: $1rn

这将始终与(.{197})匹配,但只有在rn存在的情况下才匹配。

相关内容

  • 没有找到相关文章

最新更新