0

来自德国的早安,对不起我的英语不好。

我希望有人能帮助我。

我们必须将 2 个 .xls 或 .csv 文档与超过 4000 行进行比较。两份文件的 E 列都有相同的交货单编号。此交货单编号不是唯一的,该编号可以在 E 列中使用多次。每个交货单编号在 D 列中也有多个 Pieces。

如果两个文件中的交货单编号和数量匹配,我们可以忽略并删除该行。比较两个超过 4000 行的文件非常昂贵,所以我希望可以用 Powershell 和正则表达式进行比较。

我的想法:将 xls 转换为 csv 并执行以下操作:阅读行并使用 E 列和 D 列的条目。对于 E 列的每个条目,检查该条目是否存在于第二个文件中。如果条目存在,请检查 D 列是否与 file1 中的相同。如果两个条目匹配,则删除或复制两个文件中的两行。

至少我们有两个没有分配的条目的文件。

这可能吗?

使用 PowerShell 我可以很好地处理,但是使用正则表达式...:/

提前感谢丹尼尔

4

2 回答 2

0

如果您将您的两个值视为复合主键,它似乎可以解决。您说 E 列中的第一个值不一定是唯一的。你能告诉我它的数量是否总是独一无二的?

无论如何,我建议处理这个,只是为了获得一个唯一的 (Col E, col D) 组合列表,你甚至可以只取一个“E,D”格式的字符串,只要 col E 和 col D 不包含逗号。获取此唯一值后,将其放入哈希表中,以格式化的值作为键,并以该键的文件数组作为值。

现在您有一种方法可以有效地查找哪些文件存在于哪些 Col E、Col D 组合中,因此您应该能够根据需要处理您的特定用例。

于 2013-02-28T10:57:02.633 回答
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”将仅包含唯一记录。

于 2013-02-28T12:07:25.920 回答