这里我正在写入一个文本文件。我正在sql文件中搜索关键字Raiserror
,如果该关键字存在,我必须写那行...
写得像
LineNo : 66 : raiserror ('Sequence number cannot be blank',16,1)
但我只需要写
LineNo : 66 : Sequence number cannot be blank
这是可能的..如果是如何修剪.. 这是我的代码
while ((line = file.ReadLine()) != null)
{
if (line.IndexOf("Raiseerror", StringComparison.CurrentCultureIgnoreCase) != -1)
{
dest.WriteLine("LineNo : " + counter.ToString() + " : " + " " + line.TrimStart());
}
counter++;
}
file.BaseStream.Seek(0, SeekOrigin.Begin);
counter = 1;
有任何建议吗?
答案 0 :(得分:2)
尝试使用此
int errorIndex = line.IndexOf("Raiseerror", StringComparison.CurrentCultureIgnoreCase)
if (errorIndex != -1)
{
int start = line.IndexOf('\'', errorIndex) + 1;
int finish = line.IndexOf('\'', start);
dest.WriteLine("LineNo : " + counter.ToString() + " : " + " " + line.Substring(start,finish - start));
}
答案 1 :(得分:2)
最简单的可能是使用捕获正则表达式。你应该可以这样做:
string pattern = @"raiserror \(\'(?<errortext>.+)\'";
Regex exp = new Regex(pattern);
Match match = exp.Match(line);
string errorText = match.Groups["errortext"].Value;
我在那里有点冗长,创造了比严格需要更多的变量,但是应该这样做。您可能需要为特定情况稍微修改正则表达式模式,我的是最简单的一个适用于您提供的样本行。
如果要从每一行中提取多个文本要素(例如行号,日期等),则同样可以有多个捕获组。
答案 2 :(得分:1)
如果启动始终相同,如LineNo:66:并且错误总是在'你可以使用它:
private string GetText(string text)
{
return string.Format("{0} {1}", text.Substring(0, text.LastIndexOf(":") + 1), text.Substring(text.IndexOf("'") + 1, (text.LastIndexOf("'") - text.IndexOf("'")) - 1));
}
var text = GetText("LineNo : 66 : raiserror ('Sequence number cannot be blank',16,1)");
返回“LineNo:66:序列号不能为空”
[编辑]
text.Substring(text.IndexOf("'") + 1, (text.LastIndexOf("'") - text.IndexOf("'")) - 1)
做你想做的事。
你必须自己在场周围建立其余部分!
答案 3 :(得分:0)
我不是100%肯定你的要求......如果你想修剪线条,为什么要添加所有空白?如果我误解了这个问题,我会删除答案。
var logLine = "LineNo : " + counter.ToString() + " : " + " ";
dest.WriteLine(logLine.Trim());