簡體   English   中英

Powershell:如何刪除重復項

[英]Powershell : How to Remove Duplicates

嘗試建議的方法后對代碼進行了更改

該查詢從Mysql表中選擇數據,該數據每兩分鍾更新一次。 查詢存儲在.csv文件中,供開發人員后期使用。 我需要選擇上一個循環中不存在的數據,即在列數據上比較數據集表,以便可以排除重復數據。

The source code is :
foreach($line in $csv)
{
$MySQLQuery=$line.query
$mycommand = New-Object 
MySql.Data.MySqlClient.MySqlCommand($MySQLQuery,$myConnection)
$dataAdapter = New-Object 
MySql.Data.MySqlClient.MySqlDataAdapter($mycommand)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet,"data")                                          
$mycommand.Dispose()
$newData  = $dataSet.Tables["data"] 
$rowCount = $newData.Rows.count 

if($rowCount -ne 0)
{
if($previousData -eq $null ){$extractedData =  $newData;} 
else {$extractedData = Compare-object  $previousData $newData | Where { 
$_.SideIndicator -like "=>" } | Select -ExpandProperty InputObject } 
$previousData = $newData 
 }

$newData包含具有列名“ stock_name”的表, 必須根據這些表刪除重復項。 $ previousData的類型為datatable,用於存儲來自先前迭代的數據。 $ extractedData用於保存差異數據。

================================================== ======================

我的理解是,您希望$extractedData中的數據是$newDataset新數據,而不是基於stock_name $previousData 因此,您可以像這樣更改您的Compare-object

if($newDataset.Rows.count -gt $previousData.Rows.count){
$extractedData = $newDataset | ? { ($previousData.stock_name -notcontains $_.stock_name)
}
else
{ $extractedData = $newDataset}

我猜它會起作用。

如果要使用新數據,為什么看起來需要以前的數據? 嘗試過濾和擴展Compare-Object cmdlet的結果。 下面的代碼僅返回“; lkj”數據。

$DatasetTable = "asdf","qwer","zxcv"

$newData = "asdf","qwer","zxcv",";lkj"

$newDataSet = Compare-object $DatasetTable $newData | Where { $_.SideIndicator -like "=>" } | Select -ExpandProperty InputObject

$newDataSet

不過,很難說,因為在您的第一個+=運算符之前,我看不到$previousdata變量在哪里建立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM