首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用powershell读取Csv文件并捕获相应的数据

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

Stack Overflow用户
提问于 2013-05-22 02:54:33
回答 3查看 206.9K关注 0票数 20

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

示例:

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

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

链接到示例CSV文件here

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-22 04:14:29

你应该看到的是Import

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

示例CSV:

代码语言:javascript
复制
Name  | Phone Number | Email
Elvis | 867.5309     | Elvis@Geocities.com
Sammy | 555.1234     | SamSosa@Hotmail.com

现在我们将导入CSV,并通过列表循环将其添加到数组中。然后,我们可以将输入的值与数组进行比较:

代码语言:javascript
复制
$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]
    }

这是输出:

票数 24
EN

Stack Overflow用户

发布于 2017-06-13 07:47:13

老话题,但从来没有明确的回答。我也一直在研究类似的问题,并找到了解决方案:

此代码示例中来自奥斯汀的管道不是分隔符,但是要将ForEach-对象输送到管道中,所以如果要将它用作分隔符,则需要这样做:

代码语言:javascript
复制
Import-Csv H:\Programs\scripts\SomeText.csv -delimiter "|" |`
ForEach-Object {
    $Name += $_.Name
    $Phone += $_."Phone Number"
}

我自己花了15分钟在这上面,然后我才明白到底发生了什么。希望答案能帮助下一个人阅读这篇文章,避免浪费时间!(很抱歉对您的评论进行了扩展,奥斯汀)

票数 14
EN

Stack Overflow用户

发布于 2013-10-17 21:43:06

所以我弄明白了这句话有什么不对:

代码语言:javascript
复制
Import-Csv H:\Programs\scripts\SomeText.csv |`

(原件)

代码语言:javascript
复制
Import-Csv H:\Programs\scripts\SomeText.csv -Delimiter "|"

(建议,您必须使用报价,否则,它将不起作用,ISE会给您一个错误)

它需要-Delimiter "|",以便用一个项数组填充变量。否则,Powershell ISE将不显示项目列表。

我不能说我会推荐|操作符,因为它用于将cmdlet连接到另一个。

我仍然不能让if语句返回true并输出通过提示符输入的值。

如果其他人能帮忙,那就太好了。我还是很感激这篇文章,它一直很有帮助!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16682744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档