【问题标题】:How to split and save lines from a CSV file in C#如何在 C# 中拆分和保存 CSV 文件中的行
【发布时间】:2015-01-29 06:57:11
【问题描述】:

我确实有以下 CSV 文件:

34416;15,14;22,67;71,51;73,59;73,1;67,19;64,07;64,29;67,94; ...

...

现在,我想保存第一个数字 34416 并用它替换每个分号,但不要替换第一个分号。

现在,有下一行。相同的程序,只是开头的另一个数字。

public List<string> ConvertFile()
    {
        string allLines = string.Empty;
        allLines = GetLinesFromFile();

        for (int i = 0; i < GetLinesFromFile().Length; i++)
        {
            string[] split = allLines.Split(new Char[] { ';' });
            string number = split[i];
            allLines.Replace(";", ";34416|");
        }

        List<string> re = new List<string>();
        re.Add(allLines);

        return re;
    }

我对 C# 编码非常陌生 - 你能帮帮我吗?

提前致谢。

【问题讨论】:

  • 你知道CSV数据单元格也可以包含分号吗?看看 RFC-4180:ietf.org/rfc/rfc4180.txt(第 2.6 点)
  • 您在allLines 上调用.Replace(..),而您应该在当前行上调用它,例如allLines.Replace(";", ";34416|");。并将 34416 替换为每行的第一个数字。

标签: c# string file csv split


【解决方案1】:

你需要重新思考你的逻辑。首先GetLinesFromFile() 似乎返回一个字符串;我会让它返回一个List&lt;string&gt;(文件中的每一行都是一个字符串)。然后你可以这样做:

public List<string> ConvertFile()
{
    var result = new List<string>();

    foreach(var line in GetLinesFromFile())
    {
        var lineParts = line.Split(';');
        var fixedLine = line.Replace(";", ";" + lineParts[0] + "|");
        result.Add(fixedLine);
    }

    return result;
}

【讨论】:

  • 好的,所以lines 必须是List&lt;string&gt;
  • 糟糕,忘记添加功能了;编辑了我的代码以修复它:将 lines 替换为对 GetLinesFromFile() 的调用。
  • CHAR 不包含 SPLIT / REPLACE 的定义。
  • 就像我说的:更改GetLinesFromFile(),使其返回List&lt;string&gt;string[],文件中的每一行都是一个字符串。例如使用ReadAllLines()
【解决方案2】:

试试这个

public List<string> ConvertFile( )
        {
            string allLines = GetLinesFromFile();
            List<string> re = new List<string>();
            for (int i = 0; i < allLines.Length; i++)
            {
                string[] split = allLines.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                allLines.Replace(";", ";" + split[0] + "|");
                re.Add(allLines);
            }
            return re;
        }

【讨论】:

  • 如果此代码工作正常,您标记为正确并投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多