PowerShell脚本处理含※行时CSV翻译匹配错位问题排查
修复PowerShell脚本的翻译匹配错位问题
问题根源
带※的行合并后,_Inglese.txt的有效行数减少,但原脚本仍按原始行数与CSV行做对应,导致后续翻译内容和CSV条目错位。
解决方案
先预处理_Inglese.txt生成完整的合并后翻译列表,再将该列表与CSV的翻译字段一一对应赋值,确保行数匹配、对应关系正确。
修复后的代码示例
# 读取目标CSV文件 $csvPath = "目标文件路径.csv" $csvData = Import-Csv -Path $csvPath -Delimiter "," # 根据实际分隔符调整 # 读取并预处理_Inglese.txt文件 $txtPath = "对应路径_Inglese.txt" $rawLines = Get-Content -Path $txtPath -Encoding UTF8 $processedTranslations = @() $currentTranslation = "" foreach ($line in $rawLines) { $trimmedLine = $line.Trim() if ($trimmedLine.EndsWith("※")) { # 移除※符号并合并到当前翻译内容 $currentTranslation += " " + $trimmedLine.Substring(0, $trimmedLine.Length - 1).Trim() } else { if ($currentTranslation -ne "") { # 将合并完成的翻译加入列表 $processedTranslations += $currentTranslation.Trim() $currentTranslation = "" } # 非空的独立行直接加入列表 if ($trimmedLine -ne "") { $processedTranslations += $trimmedLine } } } # 处理最后一行未完成的合并内容 if ($currentTranslation -ne "") { $processedTranslations += $currentTranslation.Trim() } # 校验行数匹配(可选,提前排查内容不匹配问题) if ($processedTranslations.Count -ne $csvData.Count) { Write-Warning "翻译行数($($processedTranslations.Count))与CSV条目数($($csvData.Count))不匹配,请检查源文件内容" } else { # 将翻译内容赋值到CSV对应字段(假设翻译字段名为Italian,根据实际调整) for ($i = 0; $i -lt $csvData.Count; $i++) { $csvData[$i].Italian = $processedTranslations[$i] } # 保存更新后的CSV $csvData | Export-Csv -Path $csvPath -Delimiter "," -NoTypeInformation -Encoding UTF8 Write-Host "翻译更新完成" }
代码说明
- 文本预处理:遍历_Inglese.txt的每一行,将带※的行合并到上一行内容中,最终生成无换行拆分问题的翻译列表。
- 行数校验:添加行数匹配检查,提前发现源文件内容不一致的问题,避免错位后才排查错误。
- 精准对应赋值:通过索引遍历CSV和预处理后的翻译列表,确保每个CSV条目对应正确的翻译内容。
测试验证
处理完成后检查CSV的翻译字段,确认“Dress Like a Pirate.”对应的意大利语“Vestiti come un pirata.”已匹配到正确行,后续翻译无错位情况。
内容的提问来源于stack exchange,提问作者Kenryoku
相关产品推荐
相关产品推荐

