18

PowerShell を使用して、ユーザー入力をキャプチャし、入力をカンマ区切りの CSV ファイルのデータと比較し、対応するデータを変数に書き込みたいと考えています。

例:

  1. ユーザーは「<code>Store_Number」の入力を求められ、「 」と入力し10ます。
  2. 入力「<code>10」は、CSV ファイルの最初の位置または列のデータと比較されます。
  3. 対応する位置/列の「<code>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
4

3 に答える 3

23

あなたが見なければならないのは 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]
    }

出力は次のとおりです。

サミーを見つけた

于 2013-05-22T04:14:29.257 に答える
13

古いトピックですが、明確に答えられたことはありません。私も同様に取り組んでおり、解決策を見つけました:

Austin のこのコード サンプルのパイプ (|) は区切り記号ではなく、ForEach-Object をパイプするためのものであるため、区切り記号として使用する場合は、次のようにする必要があります。

Import-Csv H:\Programs\scripts\SomeText.csv -delimiter "|" |`
ForEach-Object {
    $Name += $_.Name
    $Phone += $_."Phone Number"
}

何が起こっているのかを理解する前に、これに 15 分も費やしました。答えが、これを読んでいる次の人が無駄な時間を避けるのに役立つことを願っています! (オースティンのコメントを拡大して申し訳ありません)

于 2017-06-13T07:47:13.747 に答える