Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Powershell.csv文件中使用重复的标题_Powershell_Csv - Fatal编程技术网

在Powershell.csv文件中使用重复的标题

在Powershell.csv文件中使用重复的标题,powershell,csv,Powershell,Csv,我有一个.csv文件,我想将其导入powershell,然后在该文件中迭代更改某些值。然后,我希望输出附加到原始的.csv文件,以便更新值 我的问题是.csv文件的头不是唯一的,并且无法更改,因为这样它在另一个程序中就无法工作。最初,我在powershell中定义了自己的头文件来解决这个问题,但当输出文件需要使用旧头文件时,它会使用这些新头文件 我还尝试了convertfromcsv,这意味着我无法再访问需要访问的列,因此运行时会出现很多错误 理想的情况是能够使用定义的列标题,然后转换回原始列标

我有一个.csv文件,我想将其导入powershell,然后在该文件中迭代更改某些值。然后,我希望输出附加到原始的.csv文件,以便更新值

我的问题是.csv文件的头不是唯一的,并且无法更改,因为这样它在另一个程序中就无法工作。最初,我在powershell中定义了自己的头文件来解决这个问题,但当输出文件需要使用旧头文件时,它会使用这些新头文件

我还尝试了
convertfromcsv
,这意味着我无法再访问需要访问的列,因此运行时会出现很多错误

理想的情况是能够使用定义的列标题,然后转换回原始列标题。我目前的代码如下:

$csvfile = Import-Csv C:\test.csv| Where-Object {$_.'3' -eq $classID} | ConvertFrom-Csv
foreach($record in $csvfile){
*do something*}
$csvfile | Export-Csv -path C:\test.csv -NoTypeInformation -Append
我已经在网上搜索了几个小时,尝试了我遇到的一切,但都没有用。
提前感谢。

这是一个有点黑客的实现,但应该可以工作

  • 将所有标题作为一行删除并保存到某个位置
  • 解析新结果集(删除标题)
  • 完成后在顶部添加一行

  • CSV是以逗号分隔的文件,您不必将其视为结构化数据。您可以随意拼接和切块。

    因为您事先知道输入CSV文件中有多少列,所以您可以在不使用标题的情况下导入并在内部处理。例如:

    $columns = 78
    
    Import-Csv "inputfile.csv" -Header (0..$($columns - 1)) | Select-Object -Skip 1 | ForEach-Object {
      $row = $_
      $outputObject = New-Object PSObject
      0..$($columns- 1) | ForEach-Object {
        $outputObject | Add-Member NoteProperty "Col$_" $row.$_
      }
      $outputObject
    } | Export-Csv "outputfile.csv" -NoTypeInformation
    

    此示例生成新的PSObject,然后输出具有通用列名(Col0、Col1等)的新CSV文件。

    对象不能具有重复的属性(这意味着什么?)。您知道CSV文件包含多少列吗?CSV文件包含78列。标题是它们包含的数据类型,可以是长数据,也可以是字节数据。但是,powershell不允许我将这些作为标题,因为它们不是唯一的1。打开带有自定义标题的文件2。导出带有自定义标题的文件3。删除文件4的第一行。利润?谢谢你的回答,但这不是我真正想要的。谢谢你的回答,我会在有机会的时候尝试一下并发回。