PowerShell用于计算文件中的列数 [英] Powershell to count columns in a file

查看:14
本文介绍了PowerShell用于计算文件中的列数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在导入到SQL之前,我需要测试文件的完整性。 文件的每一行应具有完全相同的列数。

这些是以"|"分隔的文件。 我还需要忽略第一行,因为它是垃圾。

如果每行的列数不相同,则我需要写入一条错误消息。

我尝试过使用类似以下内容的工具,但没有成功:

$colCnt = "c:datafeedsfiletoimport.txt"
$file = (Get-Content $colCnt -Delimiter "|") 
$file = $file[1..($file.count - 1)]
Foreach($row in $file){
    $row.Count
}

计算行数很容易。列不是。 有什么建议吗?

推荐答案

是,请跳过第一行阅读文件。对于每一行,将其在管道上拆分,并计算结果。如果它与上一次不同,则抛出错误并停止。

$colCnt = "c:datafeedsfiletoimport.txt"
[int]$LastSplitCount = $Null
Get-Content $colCnt | ?{$_} | Select -Skip 1 | %{if($LastSplitCount -and !($_.split("|").Count -eq $LastSplitCount)){"Process stopped at line number $($_.psobject.Properties.value[5]) for column count mis-match.";break}elseif(!$LastSplitCount){$LastSplitCount = $_.split("|").Count}}

这样就可以了,如果它发现错误的列计数,它将停止并输出类似以下内容:

Process stopped at line number 5 for column count mis-match.

编辑:添加了Where捕获以跳过空行(?{$_})
Edit2:好的,如果您知道列数应该是多少,这就更容易了。

Get-Content $colCnt | ?{$_} | Select -Skip 1 | %{if(!($_.split("|").Count -eq 210)){"Process stopped at line number $($_.psobject.Properties.value[5]), incorrect column count of: $($_.split("|").Count).";break}}

如果希望它返回不包含210列的所有行,只需删除;break并让其运行即可。

这篇关于PowerShell用于计算文件中的列数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆