C# Stringbuilder 替换为空值
C# Stringbuilder replace with a null value
我正在尝试使用 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());
}
谢谢
一个字符文字必须正好是一个字符。 string
是零个或多个字符的序列。你想要一个没有字符的字符串,因为你不能有一个代表没有字符的字符。
Replace
的另一个重载接受字符串而不是字符作为其参数。
附带说明一下,CSV 文件可以将字段值内的引号转义为另一个引号,因此如果您的字段值为:This is my "Value"
,您可以将其写为 This is my ""Value""
,它将是正确解释。如果您可以在自己的情况下完全删除引号,那很好,只要知道有一个定义的案例,说明如何在不违反语法的情况下实际保留引号。
.replace可以接受字符串,空字符串有效,所以只需要转义双引号
formattedData.Replace("\"", "");
值得注意的是,您用逗号分隔的代码行
string[] lineItems = fileLine.Split(new char[1] { ',' });
将产生用逗号分割任何字符串的不良效果。双引号的全部意义在于隔离逗号,以便列可以包含逗号。例如
name,address,phone
"Joe","22 acacia avenue, mean street, LA","555-1234"
您的代码会将此行拆分为五个值,而不是预期的三个值。您真的应该改用专用的 CSV 解析器。
没有空字符这样的东西。最接近的是 '[=11=]'
,Unicode "null" 字符。
但是你为什么不使用 string
?您需要使用 \
:
转义 "
formattedData.Replace("\"", "");
我正在尝试使用 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());
}
谢谢
一个字符文字必须正好是一个字符。 string
是零个或多个字符的序列。你想要一个没有字符的字符串,因为你不能有一个代表没有字符的字符。
Replace
的另一个重载接受字符串而不是字符作为其参数。
附带说明一下,CSV 文件可以将字段值内的引号转义为另一个引号,因此如果您的字段值为:This is my "Value"
,您可以将其写为 This is my ""Value""
,它将是正确解释。如果您可以在自己的情况下完全删除引号,那很好,只要知道有一个定义的案例,说明如何在不违反语法的情况下实际保留引号。
.replace可以接受字符串,空字符串有效,所以只需要转义双引号
formattedData.Replace("\"", "");
值得注意的是,您用逗号分隔的代码行
string[] lineItems = fileLine.Split(new char[1] { ',' });
将产生用逗号分割任何字符串的不良效果。双引号的全部意义在于隔离逗号,以便列可以包含逗号。例如
name,address,phone
"Joe","22 acacia avenue, mean street, LA","555-1234"
您的代码会将此行拆分为五个值,而不是预期的三个值。您真的应该改用专用的 CSV 解析器。
没有空字符这样的东西。最接近的是 '[=11=]'
,Unicode "null" 字符。
但是你为什么不使用 string
?您需要使用 \
:
"
formattedData.Replace("\"", "");