CSV文件有一个按顺序显示日期的列。需要检查缺少的日期并为其添加空行。我能够得到缺少的日期,但无法弄清楚如何添加行来代替它们。
$f=(Get-Date -Day 1)
$c=(Get-Date)
$a=@()
for($i=f;$i -lt $c;$i=$i.AddDays(1)
{
$a+=$i.ToString("yyyy-mm-dd")
}
$csv=Import-Csv -Path ${FilePath} -Header "Date","Token"
$c=$csv[2..(csv.length-1)] | select "Date"
$col=@()
foreach($line in $c)
{
$properties=$line | Get-Member -MemberType Properties
for($i=0;$i -lt $properties.Count;$i++)
{
$column=$properties[$i]
$colvalue=$line | select -ExpandProperty $column.Name
$col=$col+columnvalue
}
}
$c= $a | ? {!($col -contains $_)}
输出-(当前日期7)
2023-05-01
2023-05-02
2023-05-03
2023-05-04
2023-05-05
2023-05-06
2023-05-07
从这里我得到了第一个到当前日期之间的缺失日期。如何在这些缺失日期应该在的位置添加行?
Csv文件看起来像这样-
Name
Date Token
2023-05-01 663
2023-05-02 522
2023-05-05 663
2023-05-07 636
考虑到当前日期为第7个缺失日期,则为3、4和6。所以我需要文件看起来像这样-
Name
Date Token
2023-05-01 663
2023-05-02 522
<row inserted>
<row inserted>
2023-05-05 663
<row inserted>
2023-05-07 636
编辑:所有的答案都有助于我了解如何在这方面工作,但似乎我的问题不清楚。我需要日期直到 * 当前日期 * 不是最后日期在csv文件。因此,如果今天是6月2日,我需要从本月1日到当前日期的所有缺失日期。
3条答案
按热度按时间ktca8awb1#
也许下面的内容会有所帮助,添加了内联注解来帮助您理解逻辑。
输出将变为:
ruyhziif2#
为了补充Santiago Squarzon和JosefZ提供的有用答案,使用PowerShell pipeline的版本占用的内存更少
brtdzjyr3#
下面的代码片段可能会有所帮助:
输出:
.\SO\76375843.ps1
甚至对未排序的输入也有效;考虑
更新
使用相同的算法,但输入受限,以匹配给定的标准;在下面的代码片段中
输出:
.\SO\76375843a.ps1