You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写PowerShell脚本验证CSV文件每行的两个字符串与数值

CSV文件ETL前置校验PowerShell脚本修复方案

需求说明

在将CSV文件发送至RPA工具执行ETL流程前,需完成以下校验:

  • 忽略表头行,校验每一行数据
  • 前两个字段为非空字符串(第二个字段可能包含逗号,需正确识别)
  • 第三个字段为有效数值
  • 任意行数据不满足要求或存在缺失时,判定校验失败,返回退出码2

示例数据

合格示例

ProductName,Description,Value
"Product Number One","This is a description for product number 1, released 5/3/2024",3.4563
"A different Product Number","This is a description for product number 2, released 3/2/2025",5.3200
"This is another product","Another unique description, released 6/3/2022",5.0000

不合格示例

ProductName,Description,Value
"Product Number One","This is a description for product number 1, released 5/3/2024",
"A different Product Number",,5.3200
""Another unique description, released 6/3/2022",5.0000

现有脚本问题分析

你提供的脚本仅检查文件中是否存在ProductName字符串,只要表头存在就直接返回退出码0,完全没有对数据行的内容进行校验,因此无论数据是否符合要求都会返回成功,无法满足需求。

修复后的脚本

$csvPath = 'c:\test\FileNameHere.csv'

# 读取CSV文件,自动处理带逗号的引号包裹字段
$csvData = Import-Csv -Path $csvPath

# 初始化校验通过标记
$validationPassed = $true

# 遍历所有数据行(Import-Csv自动跳过表头,直接返回数据行)
foreach ($row in $csvData) {
    # 计算当前行号(数据行从文件第2行开始,索引+2)
    $lineNumber = $csvData.IndexOf($row) + 2

    # 校验ProductName字段非空
    if ([string]::IsNullOrWhiteSpace($row.ProductName)) {
        Write-Host "错误:第$lineNumber行的ProductName字段为空"
        $validationPassed = $false
    }

    # 校验Description字段非空
    if ([string]::IsNullOrWhiteSpace($row.Description)) {
        Write-Host "错误:第$lineNumber行的Description字段为空"
        $validationPassed = $false
    }

    # 校验Value字段为有效数值
    $parsedValue = $null
    if (-not [double]::TryParse($row.Value, [ref]$parsedValue)) {
        Write-Host "错误:第$lineNumber行的Value字段不是有效数值,当前值:'$($row.Value)'"
        $validationPassed = $false
    }
}

# 根据校验结果返回对应退出码
if ($validationPassed) {
    Write-Host "CSV文件校验通过"
    exit 0
} else {
    Write-Host "CSV文件校验失败,请手动检查"
    exit 2
}

脚本逻辑说明

  1. 使用Import-Csv读取文件:PowerShell的Import-Csv会自动识别CSV的格式,正确处理被引号包裹、包含逗号的字段,无需手动解析CSV结构,避免格式错误。
  2. 逐行校验字段:
    • 用[string]::IsNullOrWhiteSpace判断前两个字段是否为空或仅包含空白字符
    • 用[double]::TryParse验证第三个字段是否能转换为有效数值,支持整数、小数等格式
  3. 错误提示:输出具体错误的行号和问题,方便定位修复
  4. 返回退出码:校验通过返回0,失败返回2,符合RPA工具的调用要求

内容的提问来源于stack exchange,提问作者Todd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:44:55