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

使用StreamWriter导出CSV时保留含逗号单元格及转用Export-Csv的方法

解决方法

一、重构StreamWriter代码(手动处理CSV格式)

核心是严格遵循CSV规范:包含逗号、双引号或换行的字段必须用双引号包裹,字段内的双引号需要转义为两个双引号。按以下逻辑修改代码:

  1. 读取TXT文件的所有行,按每10行分组。
  2. 对每组内的每一行内容做格式处理:
    • 把内容里的双引号替换为两个双引号(CSV转义规则)。
    • 用双引号包裹处理后的内容。
  3. 将每组内的10个格式化字段用逗号拼接成一行,写入CSV文件。

示例C#代码:

using System.IO;
using System.Linq;

var txtLines = File.ReadAllLines("input.txt");
using var sw = new StreamWriter("output.csv");

// 按每10行分组
var lineGroups = txtLines.Select((line, index) => new { Line = line, GroupIndex = index / 10 })
                         .GroupBy(item => item.GroupIndex);

foreach (var group in lineGroups)
{
    var formattedFields = group.Select(item => 
    {
        var escapedLine = item.Line.Replace("\"", "\"\"");
        return $"\"{escapedLine}\"";
    });
    sw.WriteLine(string.Join(",", formattedFields));
}

二、改用PowerShell的Export-Csv实现

Export-Csv会自动处理CSV格式规范(比如给含特殊字符的字段自动加双引号),无需手动处理转义。核心是把每10行TXT内容封装为自定义对象,再导出为CSV:

  1. 读取TXT文件的所有行。
  2. 按每10行分组,为每组创建一个自定义对象,对象的10个属性对应这10行内容(不足10行的补空值)。
  3. 将对象集合通过Export-Csv导出,指定不输出类型信息。

示例PowerShell代码:

$txtLines = Get-Content "input.txt"
$csvItems = @()

# 按每10行分组循环
for ($i = 0; $i -lt $txtLines.Count; $i += 10) {
    $currentGroup = $txtLines[$i..($i+9)]
    # 动态生成包含10个字段的自定义对象
    $props = @{}
    for ($j = 0; $j -lt 10; $j++) {
        $fieldName = "Field$($j+1)"
        $props[$fieldName] = if ($j -lt $currentGroup.Count) { $currentGroup[$j] } else { "" }
    }
    $csvItems += [PSCustomObject]$props
}

# 导出CSV,自动处理特殊字符
$csvItems | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:10:02