PowerShell CSV处理:请求修复Ticker非空取子串、空值用SEDOL的代码
PowerShell CSV字段处理代码修复
需求说明
处理CSV中的Ticker字段:
- 若Ticker字段非空,提取其从第2位开始的子串(即跳过第一个字符)
- 若Ticker字段为空,使用SEDOL字段从第2位开始的子串填充Ticker
原代码存在的问题
- 判断逻辑错误:直接对Ticker调用
Substring(1)来判断是否为空,会导致Ticker为空时抛出异常(空字符串没有索引1的字符) - 语法错误:else块里多套了一层花括号
{},这会把赋值语句变成未执行的脚本块,无法完成赋值 - 未做异常防护:没有考虑SEDOL字段也可能为空的情况,直接调用
Substring(1)同样会报错
修复后的代码
# 读取指定范围的CSV内容并转换为对象 $pos = $text | Select-Object -Skip $i -First ($end-$i) | ConvertFrom-Csv # 遍历处理每个对象的Ticker字段 $pos | ForEach-Object { # 先判断Ticker是否非空且长度足够 if (-not [string]::IsNullOrWhiteSpace($_.Ticker) -and $_.Ticker.Length -ge 1) { $_.Ticker = $_.Ticker.Substring(1) } # 判断SEDOL是否可用,避免报错 elseif (-not [string]::IsNullOrWhiteSpace($_.SEDOL) -and $_.SEDOL.Length -ge 1) { $_.Ticker = $_.SEDOL.Substring(1) } # 可选:两个字段都为空时的默认处理 else { $_.Ticker = "" # 也可设置为"NA"这类默认标识 } }
代码说明
- 用
[string]::IsNullOrWhiteSpace()判断字段是否为空或仅含空白字符,比直接判断$_.Ticker -ne ""更严谨 - 增加字段长度判断,确保调用
Substring(1)时不会因字符串过短抛出异常 - 移除else块多余的花括号,让赋值语句直接执行
- 补充SEDOL字段的有效性判断,避免SEDOL为空时出现错误
内容的提问来源于stack exchange,提问作者user1681664
相关产品推荐
相关产品推荐

