使用powershell读取Csv文件并捕获相应的数据

squ*_*y79 13 csv powershell

使用PowerShell我想捕获用户输入,将输入与逗号分隔的CSV文件中的数据进行比较,并将相应的数据写入变量.

例:

  1. 提示用户输入" Store_Number",他们输入" 10".
  2. 然后将输入" 10"与CSV文件的第一个位置或列中的数据进行比较.
  3. District_Number捕获相应位置/列中的数据,例如" "并将其写入变量.

我已经使用这种方法处理Excel文件(.xlsx),但发现它非常慢.希望PowerShell能够更有效地读取CSV文件.

链接到一个示例CSV文件在这里:

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
Run Code Online (Sandbox Code Playgroud)

Aus*_*nch 15

您应该关注的是Import-Csv

导入CSV后,您可以使用列标题作为变量.

示例CSV:

Name  | Phone Number | Email
Elvis | 867.5309     | Elvis@Geocities.com
Sammy | 555.1234     | SamSosa@Hotmail.com
Run Code Online (Sandbox Code Playgroud)

现在我们将导入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]
    }
Run Code Online (Sandbox Code Playgroud)

这是输出:

我找到了萨米


小智 9

老话题,但从未明确回答.我也一直在做类似的工作,并找到了解决方案:

来自Austin的此代码示例中的管道(|)不是分隔符,而是管道ForEach-Object,因此如果要将其用作分隔符,则需要执行以下操作:

Import-Csv H:\Programs\scripts\SomeText.csv -delimiter "|" |`
ForEach-Object {
    $Name += $_.Name
    $Phone += $_."Phone Number"
}
Run Code Online (Sandbox Code Playgroud)

在我理解发生了什么之前,我自己花了15分钟.希望答案能帮助下一个阅读本文的人避免浪费时间!(很抱歉扩展你的评论奥斯汀)


小智 6

所以我弄清楚这句话有什么问题:

Import-Csv H:\Programs\scripts\SomeText.csv |`
Run Code Online (Sandbox Code Playgroud)

(原版的)

Import-Csv H:\Programs\scripts\SomeText.csv -Delimiter "|"
Run Code Online (Sandbox Code Playgroud)

(建议,你必须使用报价;否则,它将无效,ISE会给你一个错误)

它需要-Delimiter "|",以便为变量填充项目数组.否则,Powershell ISE不会显示项目列表.

我不能说我会推荐|操作员,因为它用于将cmdlet彼此连接.

我仍然无法使if语句返回true并输出通过提示输入的值.

如果其他人可以提供帮助,那就太好了.我还是很欣赏帖子,它一直很有帮助!