基本的には、String.Format メソッドのお話ですが、文字列の配列の扱いとの関係での注意事項です。
-- ****************************** -- 社員マスタ更新 -- ****************************** UPDATE 社員マスタ set 氏名 = '{1}', 給与 = {2}, -- 行コメント 生年月日 = {3} -- where 社員コード = '{0}' -- 行コメント
行コメントは、正規表現で削除します。{} 部分の個数より、配列が大きい必要があり、Nothing が指定されると、{} ごとなくなります。 ※ 配列のリサイズが必要な場合は、Array.Resize メソッドで行います。 C# による記述
using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; namespace text_input { class Program { static void Main(string[] args) { // 入力ファイルのパス string[] arguments = Environment.GetCommandLineArgs(); // 引数は一つのみ許可 if (arguments.Length != 2) { Console.WriteLine("引数を指定して下さい"); return; } // 引数から取得 string filePath = arguments[1]; // パスを表示 Console.WriteLine(filePath); // ********************************* // ▼ 関数呼び出しを記述して、ALT + Enter で自動作成 // ********************************* string textData = loadTextData(filePath); // ********************************* // 行コメントの削除 // ▼ 正規表現のオプション // https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-options // ********************************* string pattern = "(?m)^--.*"; // 複数行モード textData = System.Text.RegularExpressions.Regex.Replace(textData, pattern, ""); Console.Write(textData); // ********************************* // 配列の準備(1) // ********************************* string[] data1 = { "0001", "山田太郎", "100000", "'1980/01/01'" }; Console.WriteLine("配列の数は {0} です", data1.Length); // ********************************* // 配列を文字列内に埋め込む // ********************************* string sqlResult = String.Format(textData, data1); Console.Write(sqlResult); // ********************************* // 配列の準備(2) // ********************************* string[] data2 = new string[4]; data2[0] = "0002"; data2[1] = "山田花子"; data2[2] = "20000"; data2[3] = "NULL"; // ********************************* // 配列を文字列内に埋め込む // ********************************* sqlResult = String.Format(textData, data2); Console.Write(sqlResult); // ********************************* // 配列の準備(3) // ********************************* string[] data3 = new string[4]; data3.SetValue("0003", 0); data3.SetValue("山田美子", 1); data3.SetValue("30000", 2); data3.SetValue("'1980/01/01'", 3); // ********************************* // 配列を文字列内に埋め込む // ********************************* sqlResult = String.Format(textData, data3); Console.Write(sqlResult); // ********************************* // 配列の準備(4) // ********************************* List<string> data4 = new List<string>(); data4.Add("0004"); data4.Add("山田史郎"); data4.Add("40000"); data4.Add("'1990/01/01'"); // ********************************* // 配列を文字列内に埋め込む // ********************************* sqlResult = String.Format(textData, data4.ToArray()); Console.Write(sqlResult); // ********************************* // 配列の準備(5) // ※ 追加するデータ型自由 // ********************************* ArrayList data5 = new ArrayList(); data5.Add("0005"); data5.Add("山田吾郎"); data5.Add(50000); data5.Add(new DateTime(1995, 1, 1)); // ********************************* // 配列を文字列内に埋め込む // 混在なので object 配列 // ********************************* object[] strWork = data5.ToArray(); sqlResult = String.Format(textData, strWork[0], strWork[1], strWork[2], $"'{strWork[3]}'"); Console.Write(sqlResult); Console.ReadLine(); } private static string loadTextData(string filePath) { string text = ""; // ********************************* // 主なエンコード // ********************************* // SHIFT_JIS // Encoding Enc = Encoding.GetEncoding(932); // EUC-JP //Encoding Enc = Encoding.GetEncoding(51932); // UNICODE 用 //Encoding Enc = Encoding.GetEncoding(1200); // UTF-8N Encoding Enc = new UTF8Encoding(); // UTF-8 //Encoding Enc = new UTF8Encoding(true); // プロック終了時に開放 try { using (StreamReader ReadFile = new StreamReader(filePath, Enc)) { // 読込み text = ReadFile.ReadToEnd(); // 全て読み込んでいるので閉じる ReadFile.Close(); Console.Write(text); } } catch (Exception ex) { Console.WriteLine(ex.Message); } return text; } } }
引数は、プロジェクトのプロパティからデバッグタブを開けて設定します。