0

SQLExplorer で作成した .sql ファイルを、StreamReader を使用して .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 クラスに私が理解していないメソッドがあることを望んでいます。私は Microsoft のオンライン ドキュメントにアクセスして、見栄えがよくなったと感じていますが、もう一度言いますが、私は初心者であり、おそらく概念が私の頭を飛び越えましたか?

何か助けはありますか?

注:\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 に答える