使用PowerShell我想捕获用户输入,将输入与逗号分隔的CSV文件中的数据进行比较,并将相应的数据写入变量。
示例:
Store_Number
”,然后输入“10
”。10
”与第一个位置的数据进行比较
或CSV文件的列。 District_Number
”在相应位置/
列被捕获并写入变量。我已经使用此方法处理Excel文件(.xlsx),但发现它非常慢。希望PowerShell能够更有效地读取CSV文件。
链接到示例CSV文件here:
Store_Number,Region,District,NO_of_Devices,Go_Live_Date
1,2,230,10,2/21/2013
2,2,230,10,2/25/2013
3,2,260,12,3/8/2013
4,2,230,10,3/4/2013
5,2,260,10,3/4/2013
6,2,260,10,3/11/2013
7,2,230,10,2/25/2013
8,2,230,10,3/4/2013
9,2,260,10,5/1/2013
10,6,630,10,5/23/2013
答案 0 :(得分:14)
您应该关注的是Import-Csv
导入CSV后,您可以使用列标题作为变量。
示例CSV:
Name | Phone Number | Email
Elvis | 867.5309 | Elvis@Geocities.com
Sammy | 555.1234 | SamSosa@Hotmail.com
现在我们将导入CSV,并循环遍历列表以添加到数组。然后我们可以将输入的值与数组进行比较:
$Name = @()
$Phone = @()
Import-Csv H:\Programs\scripts\SomeText.csv |`
ForEach-Object {
$Name += $_.Name
$Phone += $_."Phone Number"
}
$inputNumber = Read-Host -Prompt "Phone Number"
if ($Phone -contains $inputNumber)
{
Write-Host "Customer Exists!"
$Where = [array]::IndexOf($Phone, $inputNumber)
Write-Host "Customer Name: " $Name[$Where]
}
这是输出:
答案 1 :(得分:8)
老话题,但从未明确回答过。我也一直在做类似的工作,并找到了解决方案:
来自Austin的此代码示例中的管道(|)不是分隔符,而是管道ForEach-Object,因此如果要将其用作分隔符,则需要执行此操作:
Import-Csv H:\Programs\scripts\SomeText.csv -delimiter "|" |`
ForEach-Object {
$Name += $_.Name
$Phone += $_."Phone Number"
}
在我明白发生了什么之前,我自己花了15分钟。希望答案能帮助下一个阅读本文的人避免浪费时间! (很抱歉扩展您对Austin的评论)
答案 2 :(得分:6)
所以我弄清楚这句话有什么问题:
Import-Csv H:\Programs\scripts\SomeText.csv |`
(原文)
Import-Csv H:\Programs\scripts\SomeText.csv -Delimiter "|"
(建议,你必须使用引用;否则,它将无效,ISE会给你一个错误)
它需要-Delimiter "|"
,以便用一系列项填充变量。否则,Powershell ISE不会显示项目列表。
我不能说我会推荐|
运算符,因为它用于将cmdlet相互管道化。
我仍然无法让if语句返回true并输出通过提示输入的值。
如果其他人可以提供帮助,那就太好了。我仍然很欣赏这篇文章,它非常有帮助!