【发布时间】:2015-11-19 03:28:01
【问题描述】:
我一直在努力解决我认为非常简单的问题,但我看不到它。我有一堆 30 多个不同内容的 csv 文件,这些文件每天由不同的应用程序生成,我需要在导入单个报告数据库之前对其进行规范化。一种提取、转换和加载 (ETL) 类型的事物 - 全局查找和替换。
遍历文件没有问题 - 不确定使用 ForEach-Object Fullname 是否是最好的方法,因为输出到“OUT”文件夹会搞砸,但使用 -Name 意味着我必须包含路径。
基本上,所有“真”/“假”文本都将替换为 1/0,与“是”/“否”、开机/关机等相同。此外,我们有 4 个站点 - 每个站点都需要替换为参考。 id,很多类似的东西。我试过修改我在网上找到的大量脚本——很多都在这里。尝试使用数组中的替换文本,将 CSV 拉入字符串,只是看不到它。多年来,我一直在用 VBScript 做同样的事情,这很容易。但我需要学习 PowerShell,所以我会坚持下去。
【问题讨论】:
-
您能否给我们展示至少一个示例,其中包含一些用于测试的示例文本。只是听起来就像使用
Get-Content和.Replace()的例子,正如你所看到的,它被很好地覆盖了。即使在这里:stackoverflow.com/questions/17144355/… -
您知道哪些列名包含您要查找的数据吗?如果您这样做/您想定位特定列,只需使用
import-csv获取数据,循环遍历目标列中的替换值,然后使用export-csv保存回文件。如果您想替换出现在任何地方的值,请使用get-content和set content,使用正则表达式进行替换;只要您的分隔符不包含在文本中(即true/false和逗号分隔文件的情况),如果您要针对这些的任何外观,这可能是最简单的选择。跨度> -
大家好,感谢您的快速回复。这些是简单的 csv 文件,列数从 5 列到 45 列不等。它们主要包含公司机密数据,因此尽管我了解您想要什么,但无法将它们放到网上。我确实看过并且可以对一个值进行简单的查找/替换-例如更改true => 1,但是我是否要重新解析文件以获取false => 0?我在每个文件中有很多数据,每个文件中可能有 7 或 8 个值要替换,主要是 1/0 - db 字段是布尔值。有些用缩写代替。看看我能做些什么来获得一个例子。
-
我的脚本 - 整个上午都被黑了,所以可能很坏 - 页面不允许我添加它 - 太长了。
标签: powershell csv replace