读取文本文件到GO

时间:2010-11-12 03:34:44

标签: c# .net-4.0 filestream streamreader

我有一个多兆字节的.sql文件,每10k左右就会在换行符上有GO语句。我试图找到一种逐行读取文件的方法,直到我点击一个只有“go”和Newline字符的新行,然后将读取的内容返回给调用者,然后阅读下一堆文字,直到我再次点击GO。

Peek只让我读一个角色,在Framework 4.0上用C#实现这项工作的聪明方法是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

这应该完全按照你的意思行事 使用SQL文件的文件名字符串调用此函数,它将返回IEnumerable<string>(一串字符串),每个字符串都包含一个SQL批处理(每个字符串直到GO语句)然后可以使用foreach或其他任何内容进行循环。

public static IEnumerable<string> GetSqlBatches(string filename)
{
    using(StreamReader sr = new StreamReader(filename))
    {
        StringBuilder ReadSoFar = new StringBuilder();

        while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();
            ReadSoFar.AppendLine(line);
            if (line.Trim() == "GO")
            {
                yield return ReadSoFar.ToString();
                ReadSoFar = new StringBuilder();
            }
        }
        sr.Close();
    }
}

答案 1 :(得分:0)

如果使用SQL Server,则无需手动解析文件。请改用Server.ConnectionContext.ExecuteNonQuery方法。它是SMO的一部分。

请参阅Jon Galloway的Handling "GO" Separators in SQL Scripts - the easy way

答案 2 :(得分:0)

如果您使用BufferedStream阅读文件,那么一旦您阅读“GO”令牌,您就可以回到该行的开头。

如果文件永远在磁盘上(而不是在内存中或来自网络连接),您也可以使用FileStream,因为这也是可以搜索的。