【问题标题】:Powershell - Empty entries in CSVPowershell - CSV 中的空条目
【发布时间】:2016-08-28 03:30:08
【问题描述】:

我对 CSV 没有太多经验,如果我在这里真的失明了,请见谅。

我有一个基本的 CSV 和脚本设置来测试它。 CSV 有两列,字母和数字。字母从 A 到 F,数字从 1 到 10。这意味着 Number 的行数比 Letter 的多,因此在运行以下脚本时,输出有时会提供一个空 Letter。

$L = ipcsv ln.csv | Get-Random | Select-Object -ExpandProperty Letter
$N = ipcsv ln.csv | Get-Random | Select-Object -ExpandProperty Number

Write-Output $L
Write-Output $N

一些输出结果为

B
9

而其他人可以出来

5

我不知道问题是我的脚本没有忽略空行还是我的 CSV 写入不正确,发布在下面。

Letter,Number
A,1
B,2
C,3
D,4
E,5
F,6
,7
,8
,9
,10

我的问题是什么,我该如何解决?

【问题讨论】:

  • 无法在现代 PowerShell(此处为 5.0)中重现:puu.sh/qRd0w/f6a661a173.png
  • 我认为您正试图以一种非常奇怪的方式解决一个简单的问题。你为什么不说明你想要达到的目标?
  • 你试过分隔符$L = ipcsv ln.csv -Delimiter ',' | Get-Random | Select-Object -ExpandProperty Letter

标签: powershell csv output


【解决方案1】:

您从 CSV 中请求随机对象,而不是随机字母。由于某些行缺少一个字母,因此您最终可能会选择一个具有空 Letter-value 的行。

如果您想选择任何带有字母的行,您需要先过滤行以仅从带有值的行中选择。另外,你应该避免两次读取同一个文件,使用一个变量

#$csv = Import-CSV -Path ln.csv

$csv = @"
Letter,Number
A,1
B,2
C,3
D,4
E,5
F,6
,7
,8
,9
,10
"@ | ConvertFrom-Csv

$L = $csv | Where-Object { $_.Letter } | Get-Random | Select-Object -ExpandProperty Letter
$N = $csv | Where-Object { $_.Number } | Get-Random | Select-Object -ExpandProperty Number

Write-Output $L
Write-Output $N

CSV 可能不是这种情况的最佳解决方案。前任。您可以将这些作为数组存储在脚本中,例如:

$chars = [char[]](65..70) #A-F uppercase letters
$numbers = 1..10

$L = $chars | Get-Random
$N = $numbers | Get-Random

Write-Output $L
Write-Output $N

【讨论】:

    【解决方案2】:

    Import-Csv 将每一行变成一个对象,每一列都有一个属性。

    即使一个或多个属性值可能为空,对象仍然存在,Get-Random 没有理由确定具有特定属性的对象(例如Letter)具有值""(即一个空字符串),不应选择。

    您可以通过先扩展属性值来解决此问题,然后过滤空值,最后从非空值中选择随机值:

    $L = ipcsv ln.csv |Select-Object -ExpandProperty Letter |Where-Object {$_} |Get-Random
    $N = ipcsv ln.csv |Select-Object -ExpandProperty Number |Where-Object {$_} |Get-Random
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2021-04-08
      • 2017-01-20
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多