首页 > 解决方案 > powershell 脚本调整以获得所需的结果

问题描述

再会,

我再次需要你的帮助。使用以下脚本:

$data = Import-Csv .\input.txt -delimiter ";" -Header (1..20)
1..9 | %{$data[0].($_+10) = $data[$_].10}
($data[0] | convertto-csv -delimiter ";" -NoType | select -skip 1) -replace '"' | out-file output.txt
gc output.txt

...我正在编辑一个 .txt 文件,到目前为止,该文件最多包含 10 个数据行,他将以下行中的最后一个值写入第一行。

如果没有 10 行/值,他用分号填充它们,以便稍后可以再次导入文件。

现在我想扩展脚本,以便在 .txt 文件中最多可以有 15 行。

有人可以帮助我并告诉我必须调整哪些参数才能获得所需的结果吗?

输入:

Klaus;Müller;Straße;PLZ;Ort;;;;;DE12345;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE12345678;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE999999;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777777;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE12345;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE12345678;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE999999;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777777;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE999999;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777777;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777778;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777777;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE999999;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777777;
Klaus;Müller;Straße;PLZ;Ort;;;;;DE7777778;

所需的输出:

Klaus;Müller;Straße;PLZ;Ort;;;;;DE12345;DE12345678;DE999999;DE7777777;DE12345;DE12345678;DE999999;DE7777777;DE999999;DE7777777;DE7777778;DE7777777;DE999999;DE7777777;DE7777778;

不幸的是,我不知道我必须调整哪些值......

标签: powershell

解决方案


您必须将第一行中的 1..20 扩展到1..25 将第二行中的1..9扩展到1..14

解决方案一

$data = Import-Csv .\input.txt -delimiter ";" -Header (1..25)
1..14 | %{$data[0].($_+10) = $data[$_].10}
($data[0] | convertto-csv -delimiter ";" -NoType | select -skip 1) -replace '"' | out-file output.txt
gc output.txt

但我会建议另一种不依赖于总行数的解决方案:

建议的解决方案

$data = Import-Csv .\input.txt -delimiter ";" -Header (1..20)
($data | 
 foreach `
   -begin {$Columns=(1..10)} `
   -process { 
     $Row = $_;  #Save the loop-variable
     $Columns.foreach({$Row.$_}) ;
   $Columns =@(10)} ) -join ";"

解释

在第一行中,$Columns-Variable设置为数组 1..10。因此$Columns.foreach({$Row.$_}将产生第一行的所有十个值。之后$Columns仅设置为第 10 列。所以对于所有行

问候,马丁


推荐阅读