【发布时间】:2020-10-14 05:58:58
【问题描述】:
我一直在努力寻找一种比多个 foreach 循环更好的方法来修改大型(1000 多行)CSV 文件。
我有一个 CSV 文件:
Name,login,ID,MGRID,MGRNAME
Bob Smith,bsmith,101,201,Drake Suzy
Suzy Drake,sdrake,201,300,Long Jane
John Bass,jbass,102,201,Drake Suzy
Jane Long,jlong,300,300,Long Jane
我正在尝试找到导入 csv 的最佳方法,然后为每个员工设置 MGRNAME 以匹配相应 MGR 的登录名。我想看看:
Name,login,ID,MGRID,MGRNAME
Bob Smith,bsmith,101,201,sdrake
Suzy Drake,sdrake,201,300,jlong
John Bass,jbass,102,201,sdrake
Jane Long,jlong,300,300,jlong
我已尝试导入 csv,然后使用以下方法替换 MGRNAME:
$Sup = Import-Csv $Csvfile
Foreach ($MGR in $SUP){
$SUP1 = $MGR.MGRId
$SupID = ($sup | Where-Object {$_.login -eq $Sup1}).Login
Foreach ($ID in $Sup) {
($Sup | Where-Object {$_.MGRID -eq $SupID}).MGRNAME = $supId
}
}
我也尝试过使用类似的东西:
$Users = Import-Csv $Csvfile
Foreach ($MGR in $users){
$supID=$MGR.MGRID
$RowIndex=[array]::Indexof($MGR.MGR.NAME,"$supID")
}
欢迎任何有用的建议。 谢谢
【问题讨论】:
-
您的 CSV 格式似乎不太正确。你的分隔符是什么?如果是空格,它会弄乱你的数据,因为它们没有用引号括起来。你确定你的
Import-CSV真的有效吗?您需要为其指定尚未完成的标题和分隔符。见get-help import-csv -
这是逗号。我把它隔开以便于查看,但数据是名称、登录名、id、mgrid、mgrname 等。
-
您的完整
import-csv命令是什么?记得引用你的项目,"name","login","id","etc." -
请将“易于阅读”的假 CSV 替换为真实的。这使人们无需手动编辑即可使用您的测试数据。 [咧嘴]
标签: arrays powershell csv indexing replace