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

求助:如何用C#移除TXT文件引号外及末尾多余空格?

带引号CSV文件空格清理+传输实现方案

你的需求是处理带引号的逗号分隔文件,移除引号外的所有空格和最后一列后的冗余空格,再完成文件传输。以下是具体实现步骤:

一、核心空格清理逻辑

针对带引号的CSV格式,关键是区分引号内外的内容,只清理引号外的空格:

  • 逐行处理文件内容,用一个标记跟踪当前是否处于引号内部
  • 遍历每个字符:
    • 遇到双引号时,切换引号内/外的状态,同时保留引号
    • 处于引号内时,所有字符(包括空格)都保留
    • 处于引号外时,跳过所有空格,只保留逗号和有效数据字符
  • 每行处理完后,再去掉行尾的所有空格,解决最后一列后的冗余问题

对应的C#方法实现:

private string CleanCsvLine(string line)
{
    var cleanedLine = new StringBuilder();
    bool inQuotes = false;

    foreach (char c in line)
    {
        if (c == '"')
        {
            inQuotes = !inQuotes;
            cleanedLine.Append(c);
        }
        else if (inQuotes)
        {
            cleanedLine.Append(c);
        }
        else
        {
            // 引号外的空格直接忽略,其他字符保留
            if (c != ' ')
            {
                cleanedLine.Append(c);
            }
        }
    }

    // 清除行尾所有多余空格
    return cleanedLine.ToString().TrimEnd();
}

二、结合文件传输的完整流程

你当前用WinSCP的GetFiles从源位置拉取文件,调整流程为「拉取临时文件→清理内容→写入最终目标路径」,完整代码如下:

// 1. 先将源文件下载到本地临时路径
string tempFilePath = Path.Combine(Path.GetTempPath(), $"temp_{FileNameDestination}");
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;

TransferOperationResult transferResult = session.GetFiles(
    $"{FileSource}{FileNameSource}", 
    tempFilePath, 
    false, 
    transferOptions);
transferResult.Check(); // 捕获传输错误

// 2. 处理大文件推荐用流操作,避免内存溢出
using (var reader = new StreamReader(tempFilePath))
using (var writer = new StreamWriter($"{FileDestination}{FileNameDestination}"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        writer.WriteLine(CleanCsvLine(line));
    }
}

// 3. 清理临时文件(可选)
File.Delete(tempFilePath);

三、额外注意点

  • 如果你的CSV用单引号作为分隔符,把代码中判断引号的'"'改成'\''即可
  • 若源文件是本地文件,直接跳过WinSCP传输步骤,读取本地文件路径处理即可
  • 测试时优先用小样本文件验证,确保引号内的空格被保留、引号外的空格被正确清除

内容的提问来源于stack exchange,提问作者Antônio Magalhaes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:21:01