0

我正在尝试使用 Stringbuilder 为我构建一个 csv 文件,并且我正在使用的文件中的一些字段中有双引号。我有这段代码,如您所见,我正在尝试使用 .replace 删除"并替换为nothing,这会引发空字符文字错误。有没有更简单的方法来删除所有双引号`

public void Manipulatefile(string csv, string suffix)
    {
        StringBuilder formattedData = new StringBuilder();

        // Read all file lines into a string array.
        string path = @csv;
        string[] fileLines = File.ReadAllLines(path);

        foreach (string fileLine in fileLines)
        {

            string[] lineItems = fileLine.Split(new char[1] { ',' });


            string forename = lineItems[0];


            string surname = lineItems[1];


            formattedData.Append(forename);

            // Add the CSV seperator.
            formattedData.Append(",");

            // Append the forename to the current CSV output line.
            formattedData.Append(surname);


            formattedData.Append(",");

            formattedData.Append(forename.Substring(1,1));
            formattedData.Append(surname);
            formattedData.Append(suffix);

            formattedData.Replace('"', '');
            formattedData.AppendLine();

            File.WriteAllText(@"C:\test\MyFile.csv", formattedData.ToString());
        }

谢谢

4

3 回答 3

3

字符文字必须是一个字符。Astring是零个或多个字符的序列。你想要一个没有字符的字符串,因为你不能有一个代表没有字符的字符。

还有另一个重载,Replace它的参数接受字符串而不是字符。

附带说明一下,CSV 文件可以用另一个引号转义字段值内的引号,因此如果您的字段值是:This is my "Value"您可以将其编写为This is my ""Value"",它将被正确解释。如果您可以在您的情况下完全删除引号,那很好,只需知道有一个已定义的案例来说明如何在不违反语法的情况下实际保留引号。

于 2015-01-07T15:23:26.357 回答
3

.Replace 可以接受字符串,空字符串有效,所以只需将双引号转义即可

formattedData.Replace("\"", "");

值得记住的是,您的代码行以逗号分隔

string[] lineItems = fileLine.Split(new char[1] { ',' });

将产生不希望的效果,即拆分任何带有逗号的字符串。双引号的全部意义在于隔离逗号,以便列可以包含逗号。例如

name,address,phone
"Joe","22 acacia avenue, mean street, LA","555-1234"

您的代码会将这一行分成五个值,而不是预期的三个值。您应该真正使用专用的 CSV 解析器。

于 2015-01-07T15:23:37.347 回答
1

没有空字符之类的东西。您可以获得的最接近的是'\0'Unicode“空”字符。但你为什么不使用 a string?你需要"逃脱\

formattedData.Replace("\"", "");
于 2015-01-07T15:23:58.723 回答