基本的には、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)






