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

Add new line after x charters (repair corrupted file)

我有一个来自数据记录的文本文件,该文件应该是数据行,space 填充以便每行长 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 search/replace:

Find: (.{197}!\r)

Replace with: \r\n

这个returns没有命中。如果我没有 !\r,它会找到每一行(因为它们都是 197 个字符长)。

我一直在手动添加 LF,但我想我有几千行这样的行......仅在这个文件中......!所以我真的很想自动化这个。

我可以使用 RegEx 来:

Find: (.{197})

Replace with: \r\n

但这会将 \n 附加到每一行。我只能用NotePad++去掉空行,但我想知道有没有更聪明的方法

感谢您的帮助!

如评论所述,使用实际的编程语言比正则表达式更可靠。但是,如果您无法使用编程语言,这里有一个正则表达式应该可以使用。

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

Demo

(.{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,}

使用此版本的问题是重复组语法 {1,} 在“替换”正则表达式中通常不受支持。

只需将您的“查找”正则表达式更改为可选匹配尾随换行符序列:

Find: (.{197})(\r\n)?
Replace: \r\n

这将始终匹配 (.{197}),但仅匹配存在的 \r\n