基本的には、String.Format メソッドのお話ですが、文字列の配列の扱い(List と ArrayList)や正規表現のオプションと置換方法が注意事項です。
01.
-- ******************************
02.
-- 社員マスタ更新
03.
-- ******************************
04.
05.
UPDATE
社員マスタ
06.
set
07.
氏名 =
'{1}'
,
08.
給与 = {2},
09.
-- 行コメント
10.
生年月日 = {3}
11.
12.
--
13.
14.
where
社員コード =
'{0}'
15.
16.
-- 行コメント
行コメントは、正規表現で削除します。{} 部分の個数より、配列が大きい必要があり、Nothing が指定されると、{} ごとなくなります。 ※ 配列のリサイズが必要な場合は、Array.Resize メソッドで行います。 オンラインの正規表現テストツール (?m) は複数行モードのオプションです。m に対して s だと単一行モードになります
001.
using
System;
002.
using
System.Collections;
003.
using
System.Collections.Generic;
004.
using
System.IO;
005.
using
System.Text;
006.
007.
namespace
text_input
008.
{
009.
class
Program
010.
{
011.
static
void
Main(
string
[] args)
012.
{
013.
// 入力ファイルのパス
014.
string
[] arguments = Environment.GetCommandLineArgs();
015.
// 引数は一つのみ許可
016.
if
(arguments.Length != 2)
017.
{
018.
Console.WriteLine(
"引数を指定して下さい"
);
019.
return
;
020.
}
021.
022.
// 引数から取得
023.
string
filePath = arguments[1];
024.
025.
// パスを表示
026.
Console.WriteLine(filePath);
027.
028.
// *********************************
029.
// ▼ 関数呼び出しを記述して、ALT + Enter で自動作成
030.
// *********************************
031.
string
textData = loadTextData(filePath);
032.
033.
// *********************************
034.
// 行コメントの削除
035.
// ▼ 正規表現のオプション
036.
// https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-options
037.
// *********************************
038.
string
pattern =
"(?m)^--.*"
;
// 複数行モード
039.
textData = System.Text.RegularExpressions.Regex.Replace(textData, pattern,
""
);
040.
041.
Console.Write(textData);
042.
043.
// *********************************
044.
// 配列の準備(1)
045.
// *********************************
046.
string
[] data1 = {
"0001"
,
"山田太郎"
,
"100000"
,
"'1980/01/01'"
};
047.
Console.WriteLine(
"配列の数は {0} です"
, data1.Length);
048.
049.
// *********************************
050.
// 配列を文字列内に埋め込む
051.
// *********************************
052.
string
sqlResult = String.Format(textData, data1);
053.
Console.Write(sqlResult);
054.
055.
// *********************************
056.
// 配列の準備(2)
057.
// *********************************
058.
string
[] data2 =
new
string
[4];
059.
data2[0] =
"0002"
;
060.
data2[1] =
"山田花子"
;
061.
data2[2] =
"20000"
;
062.
data2[3] =
"NULL"
;
063.
064.
// *********************************
065.
// 配列を文字列内に埋め込む
066.
// *********************************
067.
sqlResult = String.Format(textData, data2);
068.
Console.Write(sqlResult);
069.
070.
// *********************************
071.
// 配列の準備(3)
072.
// *********************************
073.
string
[] data3 =
new
string
[4];
074.
data3.SetValue(
"0003"
, 0);
075.
data3.SetValue(
"山田美子"
, 1);
076.
data3.SetValue(
"30000"
, 2);
077.
data3.SetValue(
"'1980/01/01'"
, 3);
078.
079.
// *********************************
080.
// 配列を文字列内に埋め込む
081.
// *********************************
082.
sqlResult = String.Format(textData, data3);
083.
Console.Write(sqlResult);
084.
085.
// *********************************
086.
// 配列の準備(4)
087.
// *********************************
088.
List<
string
> data4 =
new
List<
string
>();
089.
data4.Add(
"0004"
);
090.
data4.Add(
"山田史郎"
);
091.
data4.Add(
"40000"
);
092.
data4.Add(
"'1990/01/01'"
);
093.
094.
// *********************************
095.
// 配列を文字列内に埋め込む
096.
// *********************************
097.
sqlResult = String.Format(textData, data4.ToArray());
098.
Console.Write(sqlResult);
099.
100.
// *********************************
101.
// 配列の準備(5)
102.
// ※ 追加するデータ型自由
103.
// *********************************
104.
ArrayList data5 =
new
ArrayList();
105.
data5.Add(
"0005"
);
106.
data5.Add(
"山田吾郎"
);
107.
data5.Add(50000);
108.
data5.Add(
new
DateTime(1995, 1, 1));
109.
110.
// *********************************
111.
// 配列を文字列内に埋め込む
112.
// 混在なので object 配列
113.
// *********************************
114.
object
[] strWork = data5.ToArray();
115.
sqlResult = String.Format(textData, strWork[0], strWork[1], strWork[2], $
"'{strWork[3]}'"
);
116.
Console.Write(sqlResult);
117.
118.
Console.ReadLine();
119.
120.
}
121.
122.
private
static
string
loadTextData(
string
filePath)
123.
{
124.
125.
string
text =
""
;
126.
127.
// *********************************
128.
// 主なエンコード
129.
// *********************************
130.
// SHIFT_JIS
131.
// Encoding Enc = Encoding.GetEncoding(932);
132.
// EUC-JP
133.
//Encoding Enc = Encoding.GetEncoding(51932);
134.
// UNICODE 用
135.
//Encoding Enc = Encoding.GetEncoding(1200);
136.
// UTF-8N
137.
Encoding Enc =
new
UTF8Encoding();
138.
// UTF-8
139.
//Encoding Enc = new UTF8Encoding(true);
140.
141.
// プロック終了時に開放
142.
try
143.
{
144.
using
(StreamReader ReadFile =
new
StreamReader(filePath, Enc))
145.
{
146.
// 読込み
147.
text = ReadFile.ReadToEnd();
148.
149.
// 全て読み込んでいるので閉じる
150.
ReadFile.Close();
151.
152.
Console.Write(text);
153.
}
154.
155.
}
156.
catch
(Exception ex)
157.
{
158.
Console.WriteLine(ex.Message);
159.
}
160.
161.
return
text;
162.
163.
}
164.
}
165.
}
関連する記事 C# : シンプルなテキストファイルの一括入力 / ReadToEnd() : VS2017