基本的には、String.Format メソッドのお話ですが、文字列の配列の扱い(List と ArrayList)や正規表現のオプションと置換方法が注意事項です。
-- ******************************
-- 社員マスタ更新
-- ******************************
UPDATE 社員マスタ
set
氏名 = '{1}',
給与 = {2},
-- 行コメント
生年月日 = {3}
--
where 社員コード = '{0}'
-- 行コメント
行コメントは、正規表現で削除します。{} 部分の個数より、配列が大きい必要があり、Nothing が指定されると、{} ごとなくなります。
※ 配列のリサイズが必要な場合は、Array.Resize メソッドで行います。
オンラインの正規表現テストツール
(?m) は複数行モードのオプションです。m に対して s だと単一行モードになります
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;
}
}
}
関連する記事 C# : シンプルなテキストファイルの一括入力 / ReadToEnd() : VS2017