我正在尝试验证从2个CSV文件导入的列表中是否存在某个对象,即使这2个对象相似,我也收到错误消息
$CSV1 = Import-CSV $path $delimiter $header
$CSV2 = Import-CSV $path2 $delimiter $header
$myList = New-Object -TypeName 'System.Collections.ArrayList';
$myList.add("") | Out-Null
Foreach($value in $CSV1)
{
$obj = $value.PSObject.Copy()
$obj.Name = GetNameRef($value.Name)
$obj.IP = GetIPRef($value.IP)
if(!($CSV2.contains($obj)))
{
$myList.Add($value)|Out-Null
}
}
$myList | Format-Table * | Out-File ".\Result.txt"
因此,当我手动检查时,我发现CSV2中的一个对象的所有属性值都相同,但当我执行CSV2.Contains时,他没有返回"True"
我知道这就像一个参考问题,但我没有找到任何信息,实际上或只有比较1属性
两个CSV文件具有相同的模板,如
第一个CSV文件:
Name,ServerName,IP,Mono
Luc,PM45,255.245.22.21,MonoY
Ced,PC78,245.222.1.12,MonoX
第二个CSV文件
Name,ServerName,IP,Mono
John,PM45,255.245.22.20,MonoY
Dab,PC75,245.222.11.12,MonoX
In my project for exemple The value Luc and John with IP 255.245.22.21 and 255.245.22.20 refer to the same value, I found reference with GetNameRef() and GetIpRef()
因此,我修改了一些值,以查看是否存在于第二个CSV文件中,但所有值在第二个CSV文件中没有等效值,我希望找到它们
示例:我有$object1,其值为CSV file1的第一行
我有$object2,其值为CSV file2的第一行
因此,我有:
$对象1:
姓名= Luc,
服务器名= PM45,
IP = 255.245.22.21,
单色=单色Y
$对象2:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
现在,$obj取$object1的值,我修改Name和IP以获得该值
$对象1:
姓名= Luc,
服务器名= PM45,
IP = 255.245.22.21,
单色=单色Y
$对象2:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
$对象:
姓名=约翰,
服务器名= PM45,
IP = 255.245.22.20,
单色=单色Y
因此,$obj和$object2具有相同的值属性
1条答案
按热度按时间vmdwslir1#
最简单的处理方法可能是使用
ValueTuple
或Tuple
,这两种结构在结构上是类似的,然后可以使用HashSet<T>
来过滤出现在CSV1和CSV2中的对象。请注意,此代码假定两件事:
1.两个CSV中的对象具有相同的特性名称(相同的列名称)。
1.对象具有8个或更少的属性(这是
Tuple
和ValueTuple
的限制)。