2013-05-22 20 views
8

Sử dụng PowerShell Tôi muốn nắm bắt dữ liệu nhập của người dùng, so sánh đầu vào với dữ liệu trong tệp CSV được phân tách bằng dấu phẩy và ghi dữ liệu tương ứng vào biến.Đọc một tệp Csv với PowerShell và nắm bắt dữ liệu tương ứng

Ví dụ:

  1. Một người dùng được nhắc nhở cho một “Store_Number”, họ bước vào "10".
  2. Đầu vào, “10” sau đó được so sánh với dữ liệu ở vị trí đầu tiên hoặc cột của tệp CSV.
  3. Dữ liệu, chẳng hạn như “District_Number” ở vị trí tương ứng/ cột được ghi lại và ghi vào một biến.

Tôi đã nhận được phương pháp này để làm việc với tệp Excel (.xlsx) nhưng đã nhận thấy nó quá chậm. Hy vọng rằng PowerShell có thể đọc một tệp CSV hiệu quả hơn.

Liên kết đến một tập tin CSV dụ 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

bạn có thể bắt đầu chia sẻ mã của mình không? – Bill

Trả lời

9

Những gì bạn nên nhìn vào là nhập Csv

Khi bạn nhập CSV bạn có thể sử dụng các tiêu đề cột là biến.

Ví dụ CSV:

Name | Phone Number | Email 
Elvis | 867.5309  | [email protected] 
Sammy | 555.1234  | [email protected] 

Bây giờ chúng ta sẽ nhập CSV, và vòng qua danh sách để thêm vào một mảng. Sau đó chúng tôi có thể so sánh đầu vào tăng giá trị cho mảng:

$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] 
    } 

Và đây là kết quả:

I Found Sammy

+1

AthomSfere, cảm ơn bạn đã trả lời. Tôi đã sao chép mã của bạn chính xác chỉ thay đổi đường dẫn đến tệp và không xuất được kết quả nào. Ngoài ra những gì hiện "+ =" làm gì? Tôi đã thử googling nó nhưng tìm thấy để tham khảo. – squishy79

+0

@ squishy79 Hàng tiêu đề trên CSV của bạn có giống hệt nhau không? –

+0

Vâng, chính xác như vậy. – squishy79

5

Vì vậy, tôi đã tìm ra những gì là sai với tuyên bố này:

Import-Csv H:\Programs\scripts\SomeText.csv |` 

(Bản gốc)

Import-Csv H:\Programs\scripts\SomeText.csv -Delimiter "|" 

(Đề xuất, Bạn phải sử dụng các trích dẫn; nếu không, nó sẽ không hoạt động và ISE sẽ báo lỗi cho bạn)

Yêu cầu -Delimiter "|", để biến được điền với một mảng các mục. Nếu không, Powershell ISE không hiển thị danh sách các mục.

Tôi không thể nói rằng tôi sẽ giới thiệu toán tử | vì nó được sử dụng để ghép các lệnh ghép ngắn thành nhau.

Tôi vẫn không thể nhận được câu lệnh if trả về true và xuất các giá trị được nhập thông qua lời nhắc.

Nếu bất kỳ ai khác có thể trợ giúp, điều đó thật tuyệt. Tôi vẫn đánh giá cao bài đăng, nó đã rất hữu ích!

+0

Wow, bình luận ngẫu nhiên cũ nhưng điều này trông giống như một câu hỏi tốt hơn câu trả lời. Câu trả lời ngắn gọn mặc dù, nếu tập tin của bạn đang sử dụng | ống như dấu phân cách của bạn thì nó không phải là một CSV kỹ thuật mà là một PSV (Các giá trị được phân tách bằng ống) và bạn sẽ phải nêu rõ dấu phân tách. Tương tự với nếu bạn đã sử dụng tab, dấu hai chấm, dấu chấm phẩy, v.v. –

2

Chủ đề cũ, nhưng chưa bao giờ được trả lời rõ ràng.Tôi đã làm việc trên tương tự như là tốt, và tìm thấy các giải pháp:

Các ống (|) trong mẫu mã này từ Austin không phải là dấu phân cách, nhưng để ống ForEach-Object, vì vậy nếu bạn muốn sử dụng nó như dấu phân cách, bạn cần phải làm điều này:

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

Đã dành 15 phút tốt cho bản thân mình trước khi tôi hiểu những gì đang diễn ra. Hy vọng câu trả lời sẽ giúp người tiếp theo đọc điều này tránh những phút lãng phí! (Xin lỗi vì đã mở rộng nhận xét của bạn Austin)

+0

Bắt tốt! Tôi hiểu những gì ez4sheezee đang cố gắng giải quyết trong câu trả lời của anh ấy bây giờ. –

Các vấn đề liên quan