基本的には、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; } } }
引数は、プロジェクトのプロパティからデバッグタブを開けて設定します。
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート
- C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (4)