在 ruby​​ 中解析 csv 文件时如何忽略具有唯一字符串的行

发布于 2024-09-04 03:21:11 字数 385 浏览 4 评论 0原文

我想忽略所有

TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,

Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,

来自

TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,
Add,10.1.3.1,43172
Add,10.1.3.1,44172
Add,10.1.3.1,4172
Add,10.1.3.1,432
Add,10.1.3.1,435472
Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,

i want to ignore ALL

TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,

and

Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,

from

TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,
Add,10.1.3.1,43172
Add,10.1.3.1,44172
Add,10.1.3.1,4172
Add,10.1.3.1,432
Add,10.1.3.1,435472
Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海风掠过北极光 2024-09-11 03:21:11

给定 CSV 文件的内容:

s = "TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,
Add,10.1.3.1,43172
Add,10.1.3.1,44172
Add,10.1.3.1,4172
Add,10.1.3.1,432
Add,10.1.3.1,435472
Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,
"

gsub 将删除有问题的行:

s = s.gsub(/TopLevel, Result,,,,,,,,\nAddHost,10.1.3.1,,,,,,,,\n/, '')
s = s.gsub(/Flush,,,,,,,,,\nAddHost,10.1.3.4,,,,,,,,\n/, '')
puts s
# => Add,10.1.3.1,43172
# => Add,10.1.3.1,44172
# => Add,10.1.3.1,4172
# => Add,10.1.3.1,432
# => Add,10.1.3.1,435472

您可能需要比这更具体的正则表达式。例如,如果要删除 TopLevel 行后面的任何 AddHost 行,则第一个正则表达式将为:

/TopLevel, Result,,,,,,,,\nAddHost.*\n/

当 gsub 咀嚼完文件后,将结果正常传递到 CSV 解析器。

Given the contents of the CSV file:

s = "TopLevel, Result,,,,,,,,
AddHost,10.1.3.1,,,,,,,,
Add,10.1.3.1,43172
Add,10.1.3.1,44172
Add,10.1.3.1,4172
Add,10.1.3.1,432
Add,10.1.3.1,435472
Flush,,,,,,,,,
AddHost,10.1.3.4,,,,,,,,
"

gsub will remove the offending lines:

s = s.gsub(/TopLevel, Result,,,,,,,,\nAddHost,10.1.3.1,,,,,,,,\n/, '')
s = s.gsub(/Flush,,,,,,,,,\nAddHost,10.1.3.4,,,,,,,,\n/, '')
puts s
# => Add,10.1.3.1,43172
# => Add,10.1.3.1,44172
# => Add,10.1.3.1,4172
# => Add,10.1.3.1,432
# => Add,10.1.3.1,435472

You may want regular expressions less specific than that. For example, if you want to remove ANY AddHost line following a TopLevel line, then the first regexp would be:

/TopLevel, Result,,,,,,,,\nAddHost.*\n/

When gsub is done munching on the file, pass the results to the CSV parser as normal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文