德国的早安,抱歉我的英语不好。
我希望有人可以帮助我。
我们必须将2 .xls或.csv文档与超过4000行进行比较。 两个文档都有一个E列,具有相同的交货单编号。 此交货单编号不是唯一的,该编号可以在E列中使用多次。 每个交货单编号在D列中也有许多件。
如果两个文件中的交货单编号和数量匹配,我们可以忽略并删除该行。 将两个文件与超过4000行进行比较是非常昂贵的,所以我希望可以与Powershell进行正则表达式的比较。
我的想法: 将xls转换为csv并执行以下操作: 读取行并使用E列和D列的条目。列E的Foreach Entry,检查第二个文件中是否存在此条目。如果条目存在,请检查列D是否与file1中的相同。 如果两个Entrys匹配,则删除或复制两个文件中的两行。
至少我们有两个Entrys没有作业的文件。
这可能吗?
使用PowerShell我可以很好地处理,但使用正则表达式... :/
提前致谢 丹尼尔
答案 0 :(得分:0)
如果您将两个值视为复合主键,则似乎可以解决问题。你说E列中的第一个值不一定是唯一的。你能告诉我它与数量结合时是否总是独一无二的?
无论如何,我建议,为了处理这个,只是为了获得(Col E,col D)组合的唯一列表,你甚至可以只采用“E,D”格式的字符串,只要col E和col D不包含逗号。获取此唯一值后,将其放在哈希表中,格式化值作为键,并将该键的文件数组作为值。
现在,您可以有效地查找存在Col E,Col D组合的文件,因此您应该能够根据需要处理特定用例。
答案 1 :(得分:0)
4000行听起来不是很多。试试这个:假设csv文件被称为“1.csv”和“2.csv”
add-content 3.csv (get-content 1.csv)
add-content 3.csv (get-content 2.csv)
import-csv -header A,B,C,D,E,F 3.csv |
group E,D |
where { $_.count -eq 1 } |
foreach { $_.group } |
export-csv 3.diff.csv -noTypeInformation
“3.diff.csv”将仅包含唯一记录。