【问题标题】:read data from csv file using powershell and strore each line data in an array使用powershell从csv文件中读取数据并将每行数据存储在一个数组中
【发布时间】:2017-09-18 19:26:10
【问题描述】:
#My script is as below 
$empdata = import-csv Log.csv
    ForEach ($Item in $empdata){
    "FirstName = $($empdata.FirstName)
    LastName = $($empdata.LastName)
    Laptop = $($empdata.Laptop)
    AccessCard = $($empdata.AccessCard)
    Phone = $($empdata.Phone)
    Building = $($empdata.Building)
    Location = $($empdata.Location)"
    Write-host $FirstName $LastName $Laptop  $AccessCard $Phone $Building 
    $Location

我想将每一行的数据读入一个数组并将其传递给另一个工具,但无法这样做,因为我正在获取所有列的数据以一起显示第 1 列的所有数据..

结果如下

FirstName = Suresh Krishna Shiva
LastName = setty Murthy Reddy
Laptop = Lenovo Lenovo Hp
AccessCard = yes No Yes
Phone = 123456789 45678932 12378945
Building = T4 P1 DT14
Location = Chennai Bangalore Hyderabad
FirstName = Suresh Krishna Shiva
LastName = setty Murthy Reddy
Laptop = Lenovo Lenovo Hp
AccessCard = yes No Yes
Phone = 123456789 45678932 12378945
Building = T4 P1 DT14
Location = Chennai Bangalore Hyderabad
FirstName = Suresh Krishna Shiva
LastName = setty Murthy Reddy
Laptop = Lenovo Lenovo Hp
AccessCard = yes No Yes
Phone = 123456789 45678932 12378945
Building = T4 P1 DT14
Location = Chennai Bangalore Hyderabad

I  am trying to get data in the below format


FirstName = Suresh
LastName = setty
Laptop = Lenovo
AccessCard = yes
Phone = 123456789
Building = T4
Location = Chennai    

【问题讨论】:

  • 您的管道对象为$Item,但没有在 foreach 块中使用它
  • 我们不知道您的 CSV 文件中有什么内容。请click here and edit your question 提供样本。
  • 谢谢马特明白了..将代码更改为 FirstName = $($ID.FirstName)
  • 请注意,您得到的输出与 Import-Csv Log.csv | Format-List 几乎相同。

标签: powershell csv row


【解决方案1】:
#classiq method
import-csv "c:\temp\test.csv" | %{
   "FirstName=$($_.FirstName)"
   "LastName=$($_.LastName)"
   "Phone=$($_.Phone)"
}

#other method with format
import-csv "c:\temp\test.csv" | %{
   "FirstName={0}`nLastName={1}`nPhone={2}" -f $_.FirstName, $_.LastName, $_.Phone
}

【讨论】:

    【解决方案2】:
    $empdata = Import-Csv Log.csv
    
    foreach ($item in $empdata) {
        "FirstName = $($item.FirstName)
        LastName = $($item.LastName)
        Laptop = $($item.Laptop)
        AccessCard = $($item.AccessCard)
        Phone = $($item.Phone)
        Building = $($item.Building)
        Location = $($item.Location)"
    }
    

    $empdata.FirstName = 整个FirstName 列(所有行)

    $item.FirstName = foreach 迭代中当前行的 FirstName

    $FirstName $LastName $Laptop $AccessCard $Phone $Building $Location: 在你的例子中这些都是空的(并且不需要产生你想要的输出)

    【讨论】:

    • 我想在这个foreach 循环中得到的是每一行,而不是列。如何将每一行 ($item) 作为一个可以添加属性的对象?
    • @IfediOkonkwo $item 是行对象。您应该能够使用 Add-Member 添加属性,例如:$item | Add-Member -MemberType NoteProperty -Name NewField -Value "duh" -Force
    • 嗯,我明白了。我试过的是:$item.NewField = "duh"。那没有用。我想我会在有时间的时候尝试Add-Member。谢谢。
    【解决方案3】:
    Import-Csv .\Log.csv | ForEach-Object{
    
        "
            FirstName= $($_.FirstName) `n
            LastName= $($_.LastName)   `n
            Laptop= $($_.Laptop)       `n
            AcessCard= $($_.AcessCard) `n
            Phone= $($_.Phone)         `n
            Building= $($_.Building)   `n
            Location= $($_.Location)
        "
    }
    

    【讨论】:

    • 虽然此代码可能提供问题的解决方案,但强烈建议您提供有关此代码为何和/或如何回答问题的附加上下文。从长远来看,只有代码的答案通常会变得毫无用处,因为未来遇到类似问题的观众无法理解解决方案背后的原因。
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多