0

我正在使用 StreamReader 将使用 SQLExplorer 创建的 .sql 文件导入到我的 .NET 程序中(最终将通过 OdbcConnection,仅供参考。)问题是,当我使用该ReadToEnd()方法时,它不仅导入 SQL 本身,而且它导入所有格式。所以弦上到处都是\r\t之类的东西。

我一直在研究使用拆分或可能的正则表达式来分解字符串并删除不需要的点点滴滴。但在投入大量精力之前,我想知道 StreamReader 类中是否缺少一些东西?有没有办法告诉它忽略格式化字符?

这是我现在拥有的代码:

public static Object SQLQueryFileCall(String SQLQueryFileName){

        string SQLQuery = "";
        string directory = System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location);
        SQLQueryFileName = directory + "\\" + SQLQueryFileName;

        //read in the file and pass to ODBC, return a Object[] of whatever comes back...
        try{
            using (StreamReader myStreamReader = new StreamReader(SQLQueryFileName)) {

                SQLQuery = myStreamReader.ReadToEnd();
                Console.WriteLine(SQLQuery);
            }
        }
        catch (Exception e){
            //Find the error
            Console.WriteLine("File could not be read:");
            string error = e.Message;
            MessageBox.Show(error);
            return null;
        }
}

随意提供您对代码可能有的任何建议,因为我很新。

但是,是的,大多数情况下我只是希望 StreamReader 类中有一个我不理解的方法。我去了微软的在线文档,我觉得我已经很好地看了它,但话说回来,我是新人,也许这个概念跳过了我的脑海?

有什么帮助吗?

注意:\t有些行的中间有多个,确实需要删除。因此,使用修剪会......至少会很棘手。

4

5 回答 5

2

好吧,myStreamReader.ReadToEnd();会给你一切。摆脱大多数不需要的空格的最简单方法是逐行读取,然后逐行读取.Trim()

 using (StreamReader myStreamReader = new StreamReader(SQLQueryFileName)) 
 {
    string line;
    List<string> lines = new List<string();

    while ((line = myStreamReader.ReadLine()) != null)
        lines.Add(line.Trim());

    SQLQuery = string.Join("\n", lines);
    Console.WriteLine(SQLQuery);
 }
于 2013-01-15T19:11:13.833 回答
1

根据定义,SQL 不应该在整个代码中出现制表符和换行符之类的空格问题。首先验证您的实际 SQL 是否正确。

此外,盲目地去除空格可能会对脚本中包含的文本数据产生影响;如果您有一个包含制表符的字符串文字会发生什么?

于 2013-01-15T20:28:38.447 回答
0
SQLQuery = Regex.Replace(SQLQuery, @"\t|\n|\r", "");

更好地使用,因为您可以删除 SQL 插入的内容:

using (StreamReader reader = new StreamReader(fileName)) 
{
   String line;
   List<string> lines = new List<string();

   while ((line = myStreamReader.ReadLine()) != null)
       SQLQuery += line.Trim() + "\n";
}
于 2013-01-15T19:10:03.640 回答
0
 using (StreamReader myStreamReader = new StreamReader(SQLQueryFileName)) 
 {  
    while ((line = myStreamReader.ReadLine()) != null)
    {
        Console.WriteLine(line.Trim().Replace(@"\t"," ")
    }
 }

如果是显示问题而不是内容问题,我认为您可以使用 WPF 和 RichTextBox。

于 2013-01-15T19:30:03.627 回答
0

这就是在 2020 年帮助我的原因,以防有人在寻找这个

using (StreamReader sr = new StreamReader(stream))
{
   return Regex.Replace(sr.ReadToEnd().Trim(), @"\s", "");
}
于 2020-08-05T11:38:26.063 回答