我正在阅读XLS文件的内容。一些旧版本的excel添加了我假设的单元格中的转义序列,这些序列在尝试创建该名称的SQL列时会导致问题。
我必须使用的示例字符串作为
传递\ 0 \ 0K \ 0 \ B \ 0Job
我想将此字符串作为" Job"。以下作业中的替换序列均未进行更改,并返回
\ 0 \ 0K \ 0 \ b \ 0Job
C#不允许手动创建该字符串而不使用" \\"来转义它,这违背了我需要的目的。
有什么建议吗?
public static string CleanupHeaders(string _Col)
{
// Replace your @"\" parameter with double-escaped: @"\\"
_Col = _Col.Replace(@"\\0K", "");
_Col = _Col.Replace(@"\\b", "");
_Col = _Col.Replace(@"\\0", "");
return _Col;
}
答案 0 :(得分:0)
向您报告字符串内容的内容可能是为了人类可读性而将实际零字符报告为\0
。
尝试从那里的替换字符串中删除@
。
答案 1 :(得分:0)
您提供的代码应该完全符合预期as seen in this example。
所有人如何被召唤
由于您提到您的初始字符串未被更改,因此值得注意的是,您的替换函数实际上会返回一个字符串并且不会执行内联替换,因此您需要这样做需要通过以下方式调用:
// This will set your original string to the result of your CleanupHeaders() method
yourColumnVariable = CleanupHeaders(yourColumnVariable);
如果您确实想要对现有字符串进行内联替换,只需更新CleanupHeaders()
方法即可使用ref
参数对传入的实际引用执行更新:
// Notice the ref keyword
public static void CleanupHeaders(ref string _Col)
{
_Col = _Col.Replace(@"\0K", "");
_Col = _Col.Replace(@"\b", "");
_Col = _Col.Replace(@"\0", "");
}
然后您可以使用以下方法调用它:
// This will update the yourColumnVariable to reflect any changes made in the method
CleanupHeaders(ref yourColumnVariable);
答案 2 :(得分:0)
有什么建议吗?
我有一个,因为string
以"\0\0K\0\b\0Job"
的形式出现,您的字符串替换方法_Col.Replace
不应该使用文字语法。在 C#中,\
是转义字符,以下字符会创建escape sequence。
问题是带有@
语法的逐字字符串。删除它,你得到"工作"。看到这个工作.NET Fiddle - 它有几个演示,可以很容易地告诉你发生了什么。请查看@ MSDN's reference on string literals了解更多详情。
public static string CleanupHeaders(string _Col)
{
_Col = _Col.Replace("\0K", "");
_Col = _Col.Replace("\b", "");
_Col = _Col.Replace("\0", "");
return _Col;
}
在这种情况下,没有理由使用它们。
<强>更新强>
OP 稍微改变了一下这个问题,所以这里有一个更新.NET Fiddle。
答案 3 :(得分:0)
如果你有一个调试器,我首先建议看看_Col
字符串传递到CleanupHeaders()
方法时的值是什么。
取决于字符串的位置:
“\ 0 \ 0K \ 0 \ B \ 0Job”
来自;我想它在到达你的代码时已经被转义了。
字符串看起来像这样:"\\0\\0K\\0\\b\\0Job"
当它到达你的方法时。
我建议2件事中的一件:
1:用\
或您选择的任何字符替换字符串中的所有-
:
_Col = _Col.Replace(@"\\", "-");
然后替换现在具有-
前缀的匹配字符串:
// Replace all your escaped backslashes
_Col = _Col.Replace(@"\\", "-");
// Now replace your new prefix + values you are looking to replace
_Col = _Col.Replace("-0K", "");
_Col = _Col.Replace("-0", "");
_Col = _Col.Replace("-b", "");
return _Col;
或者
2:\0
被识别为角色,因为它已被转义;所以它没有被打印/输出。尝试使用.Replace(@"\0", "");
更改.Replace(@"\\0", "");
,如下所示:
public static string CleanupHeaders(string _Col)
{
_Col = _Col.Replace(@"\\0K", ""); // Replaces the exact already escaped \\ value.
_Col = _Col.Replace(@"\\b", "");
_Col = _Col.Replace(@"\\0", "");
return _Col;
}