因此,我使用在不同位置生成的一些CSV文件。例如,服务器与我的笔记本电脑具有不同的区域设置,因此文件可以由分隔,或者;如果我没有指定-delimiter参数,powershell似乎根本无法看到CSV文件是通过分隔的,所以可以使用它!我想有一个通用的脚本,它不关心的CSV文件来源。在您不知道分隔符的情况下,正确导入CSV文件的唯一方法似乎是这样:
$line=gc "list1.csv"|select -first 1
if($line-like "*,*" -and -not ($line-like "*;*")){
$list1=Import-Csv "list1.csv" -Delimiter ","
}else{
$list1=Import-Csv "list1.csv" -Delimiter ";"
}谁有更好的主意?
发布于 2019-11-23 00:45:52
不是更好的主意,只是重构:
$line = Get-Content "list1.csv" | Select -First 1
$delimiter = if($line.Split(";").Length -gt 1){";"}else{","};
$list1 = Import-Csv "list1.csv" -Delimiter $delimiter当然,只有当您的分隔符是,或;时,这才有效。
发布于 2019-11-23 00:42:22
在PowerShell中使用switch可以很容易地使其更具可读性
PowerShell上没有任何东西可以自动确定分隔符。您可以使用以下switch语句创建一个可以执行此操作的函数:
$a = $line -like "*,*"
$b = $line -like "*;*"
switch($True) {
$a {Import-Csv "list.csv" -Delimiter ","}
$b {Import-Csv "list.csv" -Delimiter ";"}
Default {Write-Error "Cannot determine delimiter"}
}但是,如果要添加不同的分隔符,则必须确定逻辑。那就交给你去做吧:)。
https://stackoverflow.com/questions/58998109
复制相似问题