我正在尝试编写一个快速且脏的控制台应用程序实用程序来查找文件中的ObjectName,然后将所有出现的Application Name设置为ObjectName。
对象名称是一个简单的字符串[ DTS:ObjectName="CT Load AdmissionSource" ]
但是应用程序名称嵌入在连接字符串中。
DTS:ConnectionString="Data Source=r04phidwh62;Initial Catalog=V5DW;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;Application Name=ETL Lab test;Trust Server Certificate=True;" />
当我ReadLine()
并尝试获取子字符串时,我会额外获得额外的' \'当我设置pn时,正在绊倒我的角色。
我有没有办法设置pn而没有那些\ ReadLine()
注入?
示例:
"<?xml version=\"1.0\"?>" <== extra \
<?xml version="1.0"?>
System.IO.StreamReader file =
new System.IO.StreamReader(@"D:\Transforms\" + files[i]);
string pn = "";
while ((line = file.ReadLine()) != null)
{
if (line.Contains("DTS:ObjectName"))
{
if (pn.Length == 0)
{
pn = line.Substring(line.IndexOf("=") + 1);
System.Console.WriteLine(pn);
}
}
if (line.Contains("Application Name"))
{
string output = line.Substring(line.IndexOf("Application Name=") + 17);
if (output.Contains("-{"))
{
output = output.Substring(0, output.IndexOf("-{"));
}
else
{
output = output.Substring(0, output.IndexOf(";"));
}
System.Console.WriteLine(output);
line= Regex.Replace(line, @"\"+ output +"\b", pn);
outputfile.WriteLine(line);
}
counter++;
}
file.Close();
outputfile.Close();
System.Console.ReadLine();
File.Delete(@"D:\Transforms\" + files[i]);
File.Move(@"D:\Transforms\output.txt", @"D:\Transforms\" + files[i]);
}
答案 0 :(得分:1)
它没有按照你的想法行事。 ReadLine()将不添加不属于流的字符。当您在调试器中查看字符串时,Visual Studio将向您显示这些字符,但它们实际上并不是内存中的字符串的一部分。