通过使用C#修剪某些字符来写入文本文件?

时间:2011-05-19 14:37:45

标签: c#

这里我正在写入一个文本文件。我正在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;

有任何建议吗?

4 个答案:

答案 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());