如何在 PowerShell 中遍历数据集?

Posted

技术标签:

【中文标题】如何在 PowerShell 中遍历数据集?【英文标题】:How do I loop through a dataset in PowerShell? 【发布时间】:2010-10-22 16:38:06 【问题描述】:

我正在尝试从DataSet 输出每一行的值:

for ($i=0;$i -le $ds.Tables[1].Rows.Count;$i++)

  Write-Host 'value is : ' + $i + ' ' + $ds.Tables[1].Rows[$i][0]

给出输出...

value is :  +0+ +System.Data.DataSet.Tables[1].Rows[0][0] 
value is :  +1+ +System.Data.DataSet.Tables[1].Rows[1][0] 
value is :  +2+ +System.Data.DataSet.Tables[1].Rows[2][0] 
value is :  +3+ +System.Data.DataSet.Tables[1].Rows[3][0] 
value is :  +4+ +System.Data.DataSet.Tables[1].Rows[4][0] 
value is :  +5+ +System.Data.DataSet.Tables[1].Rows[5][0] 
value is :  +6+ +System.Data.DataSet.Tables[1].Rows[6][0] 

如何从列中获取实际值?

【问题讨论】:

【参考方案1】:

解析器无法连接您的字符串。试试这个:

write-host 'value is : '$i' '$($ds.Tables[1].Rows[$i][0])

编辑:使用双引号也可能更清楚,因为您可以在带引号的字符串中包含表达式:

write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"

【讨论】:

zdan - 关闭,但你应该在整个字符串周围加上双引号(单引号不允许评估)。并且您不需要字符串中的额外引号或反引号(很难分辨它们是什么)。 评估在单引号之外执行并与带引号的字符串连接,这相当于将整个内容用双引号括起来。我同意这会更清楚,但我想匹配他原来的问题。【参考方案2】:

PowerShell 字符串评估正在对 DataSet 调用 ToString()。为了评估任何属性(或方法调用),您必须通过将表达式括在 $() 中来强制评估

for($i=0;$i -lt $ds.Tables[1].Rows.Count;$i++)
 
  write-host "value is : $i $($ds.Tables[1].Rows[$i][0])"

此外,foreach 允许您遍历集合或数组,而无需计算长度。

重写(并为编译而编辑)-

foreach ($Row in $ds.Tables[1].Rows)
 
  write-host "value is : $($Row[0])"

【讨论】:

【参考方案3】:

这是一个实际示例(从您当前的位置构建数据集):

$ds = new-object System.Data.DataSet
$ds.Tables.Add("tblTest")
[void]$ds.Tables["tblTest"].Columns.Add("Name",[string])
[void]$ds.Tables["tblTest"].Columns.Add("Path",[string])

dir | foreach 
    $dr = $ds.Tables["tblTest"].NewRow()
    $dr["Name"] = $_.name
    $dr["Path"] = $_.fullname
    $ds.Tables["tblTest"].Rows.Add($dr)



$ds.Tables["tblTest"]

$ds.Tables["tblTest"] 是一个可以像任何其他 Powershell 对象一样操作的对象:

$ds.Tables["tblTest"] | foreach 
    write-host 'Name value is : $_.name
    write-host 'Path value is : $_.path

【讨论】:

以上是关于如何在 PowerShell 中遍历数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何在powershell中遍历csv文件中的一行

如何在火花中遍历数据集列?

如何遍历 spark 数据集并更新 Java 中的列值?

Apache Spark Java - 如何遍历行数据集并删除空字段

如何使用批处理或PowerShell从文本文件中删除换行符

如何在 Python 中遍历 C++ 集?