对于通过PS从csv文件导入SQL,我需要检查csv中的列是否是正确的名称。下面的函数告诉我,我丢失了csv文件中的所有列。
Powershell Function CheckCSVColumnsExist
{
Param(
[Object]$CSVImportFile,
[Array]$ColumnsToCheck = ''
)
$c = (get-content $CSVImportFile | Select-Object -First 2) | ConvertFrom-CSV
$ColumnHeaders = $c.psobject.properties.name
foreach ($ctc in $ColumnsToCheck){
if ($ColumnHeaders -notcontains $ctc){
[array]$MissingColumnName += [PSCustomObject]@{Column_Name = $ctc}
}
}
$MissingColumnName
}
正在执行PowerShell命令:
CheckCSVColumnsExist $WorkspaceCSV "column1","column2","column3","column4","column5","column6","column7","column8","column9"
CSV内容:
column1,column,column3,column4,column5,column6,column7,column8,column9
A11111 A111,A111/11,A111,Test Partner,11,A111,DAA,D Test,01/01/1970
3条答案
按热度按时间z9zf31ra1#
问题是,您试图从
ConvertFrom-Csv
(和Import-Csv
)返回的第一个数据行读取列名,但如果源csv文本中只有标题行(这就是您所拥有的),则它们不会返回 * 任何内容 *。你可以看到这一点:
你可以做的是取csv文件的第一行,并附加一个虚拟数据行:
然后你的函数的其余部分就可以读取对象的属性了。
**但是要小心!**因为csv列名可能包含换行符,然后一切都开始有点错误:
但也许这不会成为你的数据的问题,这可能是“足够好”。
如果没有,有各种各样的第三方库,你可以
Add-Type
,可以处理csv文件,你可以看看,让你读的列名,即使只有一个标题行的数据…yvt65v4c2#
我想我找到了一个解决办法:
将CSV导入SQL的完整代码
3mpgtkmj3#
如果你的csv确实有数据,你可以把你的函数改成这样:
在上面的代码中,我故意用
"column"
添加了一个错误,在csv文件中,这被称为"column2"
来显示输出: