带有空标题的 Powershell import-csv

发布于 2024-09-12 00:55:08 字数 563 浏览 4 评论 0原文

我正在使用 PowerShell 导入带有标题的制表符分隔文件。生成的文件在标题的第一行末尾有一些空字符串“”。 PowerShell 失败并出现错误:

“无法处理参数,因为 参数“名称”的值无效。 更改“名称”的值 参数并再次运行该操作”

因为标头需要一个名称。

我想知道是否有人对如何操作文件以删除双引号或用 "1" "2" "3" 枚举它们有任何想法。 ..“10”等。

理想情况下,我不想修改我的原始文件。我在想这样的事情,

$fileContents = Get-Content -Path = $tsvFileName
$firstLine = $fileContents[0].ToString().Replace('`t""',"")
$fileContents[0] = $firstLine
Import-Csv $fileContents -Delimiter "`t"

但是 Import-Csv 期望 $fileContents 是一个路径。我可以让它使用 Content 作为源吗?

I'm using PowerShell To import a TAB separated file with headers. The generated file has a few empty strings "" on the end of first line of headers. PowerShell fails with an error:

"Cannot process argument because the
value of argument "name" is invalid.
Change the value of the "name"
argument and run the operation again"

because the header's require a name.

I'm wondering if anyone has any ideas on how to manipulate the file to either remove the double quotes or enumerate them with a "1" "2" "3" ... "10" etc.

Ideally I would like to not modify my original file. I was thinking something like this

$fileContents = Get-Content -Path = $tsvFileName
$firstLine = $fileContents[0].ToString().Replace('`t""',"")
$fileContents[0] = $firstLine
Import-Csv $fileContents -Delimiter "`t"

But Import-Csv is expecting $fileContents to be a path. Can I get it to use Content as a source?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拥抱我好吗 2024-09-19 00:55:08

您可以提供自己的标头并忽略 csv 的第一行,也可以像 Keith 所说的那样在末尾使用 Convertfrom-csv 。

ps> import-csv -Header a,b,c,d,e foo.csv

现在,文件中的无效标头只是您可以跳过的一行。

-奥辛

You can either provide your own headers and ignore the first line of the csv, or you can use convertfrom-csv on the end like Keith says.

ps> import-csv -Header a,b,c,d,e foo.csv

Now the invalid headers in the file is just a row that you can skip.

-Oisin

箹锭⒈辈孓 2024-09-19 00:55:08

如果您想使用字符串,请使用 ConvertFrom-Csv 例如:

PS> 'FName,LName','John,Doe','Jane,Doe' | ConvertFrom-Csv | Format-Table -Auto

FName LName
----- -----
John  Doe
Jane  Doe

If you want to work with strings instead use ConvertFrom-Csv e.g.:

PS> 'FName,LName','John,Doe','Jane,Doe' | ConvertFrom-Csv | Format-Table -Auto

FName LName
----- -----
John  Doe
Jane  Doe
影子的影子 2024-09-19 00:55:08

我最终需要处理这个问题的多个实例。我没有使用 -Header 并手动设置每个导入实例,而是编写了一个更通用的方法来应用于所有实例。我剔除第一行的所有“t”实例,并将文件保存为 $filename + _bak 打开并导入该文件。

$fileContents = Get-Content -Path $tsvFileName

if( ([string]$fileContents[0]).ToString().Contains('""') )
{
  [string]$fixedFirstLine = $fileContents[0].ToString().Replace('`t""',"")
  $fileContents[0] = $fixedFirstLine
  $tsvFileName = [string]::Format("{0}_bak",$tsvFileName

  $fileContents | Out-File -FilePath $tsvFileName

}

Import-Csv $tsvFileName -Delimiter "`t"

I ended up needing to handle multiple instances of this issue. Rather than use the -Header and manually setting up each import instance I wrote a more generic method to apply to all of them. I cull out all of the `t"" instances of the first line and save the file to open as a $filename + _bak and import that one.

$fileContents = Get-Content -Path $tsvFileName

if( ([string]$fileContents[0]).ToString().Contains('""') )
{
  [string]$fixedFirstLine = $fileContents[0].ToString().Replace('`t""',"")
  $fileContents[0] = $fixedFirstLine
  $tsvFileName = [string]::Format("{0}_bak",$tsvFileName

  $fileContents | Out-File -FilePath $tsvFileName

}

Import-Csv $tsvFileName -Delimiter "`t"
吖咩 2024-09-19 00:55:08

如果您有很多列,我的解决方案:

$index=0

$ColumnsName=(Get-Content "C:\temp\yourCSCFile.csv" | select -First 1) -split ";" | %{

$index++
"Header_{0:d5}" -f $index

}

import-csv "C:\temp\yourCSCFile.csvv" -Header $ColumnsName

My Solution if you have much columns :

$index=0

$ColumnsName=(Get-Content "C:\temp\yourCSCFile.csv" | select -First 1) -split ";" | %{

$index++
"Header_{0:d5}" -f $index

}

import-csv "C:\temp\yourCSCFile.csvv" -Header $ColumnsName
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文