トップ 最新 追記

Masa's blog

検索キーワード:

2020年09月22日 C# memo [長年日記]

_ C# memo

HelloWorld.cs

using System;
public class AnyClassYouLike{
	static void Main(string[] args){
		Console.WriteLine("HelloWorld");
		return;
	}
}

変数

sbyte			//8ビット整数(符号付き)
byte			//8ビット整数(符号無し)
short			//16ビット整数(符号付き)
ushort			//16ビット整数(符号無し)
int			//32ビット整数(符号付き)
uint			//32ビット整数(符号無し)
long			//64ビット整数(符号付き)
ulong			//64ビット整数(符号無し)
float			//32ビット浮動小数(例 123.456f)
double			//64ビット浮動小数(例 123.456d)
char			//文字(UNICODE)(例 'あ')
bool			//論理値 (true or false)
decimal		//高精度 10進数浮動小数(例 123.456m)

string			//文字列(UNICODE)(例 "あいうえお")
object			//全ての型の基底となる型

配列

int[] a = new int[3] {1,2,3};
int[,] a = new int[2,3] {{1,2,3},{4,5,6}};

ハッシュ

using System.Collections;
Hashtable ht = new Hashtable();
ht["key1"] = "data1";
// ht.ContainsKey("key1") // True or False
// foreach (string key in ht.Keys){ ... }

標準入出力

using System;
Console.Write("あいうえお");		// 改行無し
Console.WriteLine("あいうえお");	// 改行有り
Console.WriteLine("私は{0}{1}です","伊藤","太郎");

string input = Console.ReadLine();

文字列フォーマット

string str = string.Format("{(インデックス)[,(表示幅)][:(書式)(精度)]}", 値)

// (インデックス)	0オリジン
// ,(表示幅)		整数値、マイナス指定は左寄せ
// :(書式)(精度)	d 整数値の10進表記、(精度)は桁数を表す(先頭ゼロ埋め)
//			e 指数表記、(精度)は仮数部の小数点桁数を表す
//			f 固定小数点表記、(精度)は小数点桁数を表す
//			n 3桁区切り文字入りの数値表記、(精度)は小数点桁数を表す
//			x 整数値の16進表記、(精度)は桁数を表す(先頭ゼロ埋め)
string str = string.Format("{(インデックス):###,###,###}", 値)

// 可変長、先頭ゼロ埋め無し、桁区切り付き、マイナス符号付き
string str = string.Format("{(インデックス):000,000,000}", 値)

// 固定長、先頭ゼロ埋め有り、桁区切り付き、マイナス符号付き

条件分岐

if (a == 1){
}else if (a == 2){
}else{
}

繰返し

using System;
using System.Collections;

while (a < 10){
}

for (int i = 0; i < 10; i++){
}

int[] array = new int[10] {1,2,3,4,5,6,7,8,9,10};
foreach (int i in array){
}

Hashtable hash = new Hashtable() {
	{"key1","value1"},
	{"key2","value2"},
	{"key3","value3"}
};
ArrayList list = new ArrayList (hash.Keys);
list.Sort();
foreach (string key in list){
}

ファイル入出力(テキスト)

using System.IO;
using System.Text;

StreamReader sr = new StreamReader("input.csv", Encoding.GetEncoding("UTF-8"));
bool append_sw = false;
StreamWriter sw = new StreamWriter("output.csv", append_sw, Encoding.GetEncoding("UTF-8"));
string str = null;
while ((str = sr.ReadLine()) != null){
	sw.WriteLine(str);
}
sr.Close();
sw.Close();

ファイル入出力(バイナリ)

using System.IO;

byte[] buf = new byte[1024];
FileStream sr = new FileStream("input.dat", FileMode.Open, FileAccess.Read);
FileStream sw = new FileStream("output.dat", FileMode.Create, FileAccess.Write);
int readsize = 0;
while ((readsize = sr.Read(buf, 0, 1024)) > 0){
	sw.Write(buf, 0, readsize);
}
sr.Close();
sw.Close();

ファイル入出力(バイナリ2)

using System.IO;

byte[] buf = new byte[1024];
byte b;
FileStream srw = new FileStream("output.dat", FileMode.Open, FileAccess.ReadWrite);
int readsize = 0;
srw.Seek(10, SeekOrigin.Begin);
readsize = srw.Read(buf, 0, 5);
b = buf[0];buf[0] = buf[4]; buf[4] = b;
b = buf[1];buf[1] = buf[3]; buf[3] = b;
srw.Seek(10, SeekOrigin.Begin);
srw.Write(buf, 0, 5);
srw.Close();

引数

using System;
public class AnyClassYouLike{
	static void Main(string[] args){
		for (int i = 0; i < args.Length; i++){
			Console.WriteLine(args[i]);
		}
		return;
	}
}

文字列連結

 string str = "あいう" + "えお";

文字列分割

using System.Text.RegularExpressions;

string input = "aa,bb,,cc,,,dd";
string sep = ",+";
string[] array = Regex.Split(input, sep);

部分文字列

string str = "abcあいうdef";
string hiragana = str.Substring(3, 3);

文字列比較(正規表現)

using System.Text.RegularExpressions;

if (Regex.IsMatch("abcdefg", "b.*e")){ ... }

文字列置換(正規表現)

using System.Text.RegularExpressions;

string str = Regex.Replace("abcdefg", "b.*f", "b to f");
string str = Regex.Replace("abcdefg", "^(.)(.*)(.)$", "$3$2$1");

文字列⇒数値変換

int i = int.Parse("123");
float f = float.Parse("123.456");

型変換

int i = (int)123.45;

日時取得

DateTime dt;

dt = new DateTime(2020,9,20,12,59,59);
Console.WriteLine(dt.ToString());
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss"));
Console.WriteLine(dt.Year);
Console.WriteLine(dt.Month);
Console.WriteLine(dt.Day);
Console.WriteLine(dt.Hour);
Console.WriteLine(dt.Minute);
Console.WriteLine(dt.Second);

dt = DateTime.Parse("2020/09/20 12:59:59");
dt = DateTime.Now;

DateTime dt2 = dt.AddYears(10);	// AddMonths(), AddDays(), AddHours(), AddMinutes(), AddSeconds()
Console.WriteLine(dt.CompareTo(dt2));	// -1 (-1, 0, 1)

外部コマンド実行

using System;
using System.Diagnostics;

ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = "ipconfig.exe";
pInfo.CreateNoWindow = true;		// do not open console window
pInfo.UseShellExecute = false;		// false for console command, true for windows app
pInfo.RedirectStandardOutput = true;
pInfo.RedirectStandardError = true;
pInfo.Arguments = "/all";
Process p = Process.Start(pInfo);
p.WaitForExit();
String stdOut = p.StandardOutput.ReadToEnd();
String stdErr = p.StandardError.ReadToEnd();
int exitCode = p.ExitCode;
p.Close();
Console.WriteLine(stdOut);
Console.WriteLine(stdErr);

終了

Environment.Exit(0);

例外処理

try{
	throw new Exception("エラーだよ");
}catch(Exception e){
	Console.WriteLine(e);
	Console.WriteLine(e.Message);
}finally{
	Console.WriteLine("finally");
}

クラス

using System;

public class AnyClassYouLike{
	static void Main(string[] args){
		MyClass mc = new MyClass("あいう", "えお");
		mc.show();
		MyClass2 mc2 = new MyClass2("あいう", "えお", "かきくけこ");
		mc2.show();
		return;
	}
}

public class MyClass{
	string p1;
	string p2;
	public MyClass(){
		this.p1 = "";
		this.p2 = "";
	}
	public MyClass(string p1, string p2){
		this.p1 = p1;
		this.p2 = p2;
	}
	public virtual void show(){
		Console.WriteLine(this.p1 + "," + this.p2);
	}
}

public class MyClass2 : MyClass{
	string p3;
	public MyClass2(){
	}
	public MyClass2(string p1, string p2, string p3) : base(p1, p2){
		this.p3 = p3;
	}
	public override void show(){
		base.show();
		Console.WriteLine(this.p3);
	}
}

インターフェース

using System;
public class AnyClassYouLike{
	static void Main(string[] args){

		Ianimal a;
		a = new Dog();
		a.talk();
		a = new Cat();
		a.talk();

		return;
	}
}

interface Ianimal{
	void talk();
}

class Dog : Ianimal{
	public void talk(){
		Console.WriteLine("わんわん");
	}
}

class Cat : Ianimal{
	public void talk(){
		Console.WriteLine("にゃー");
	}
}

Oracle

using System;
using System.Data;
using System.Data.OracleClient;

public class AnyClassYouLike{
	static void Main(string[] args){

		string ip = "127.0.0.1";
		string user = "mito";
		string password = "oracle";
		string connectionString = "Data Source=" + ip + ";User ID=" + user + ";Password=" + password + ";Integrated Security=false;";
		OracleConnection connection;
		OracleCommand ocmd;
		OracleParameter bind_id;
		OracleParameter bind_name;
		OracleDataReader ord;
		int	row;
//
		connection = new OracleConnection(connectionString);
		connection.Open();
		ocmd = new OracleCommand();
		ocmd.Connection = connection;
		ocmd.Transaction = connection.BeginTransaction();
//
		ocmd.CommandText = "insert into t_sample (id,name) values(:id,:name)";

		bind_id = new OracleParameter("id", "00000001");
		ocmd.Parameters.Add(bind_id);
		bind_name = new OracleParameter("name", "伊藤 太郎");
		ocmd.Parameters.Add(bind_name);

		row = ocmd.ExecuteNonQuery();

		ocmd.Parameters.Remove(bind_id);
		ocmd.Parameters.Remove(bind_name);
		ocmd.Transaction.Commit();	// or .Rollback();
		ocmd.Transaction = connection.BeginTransaction();
//
		ocmd.CommandText = "select id,name from t_sample where id >= :id";

		bind_id = new OracleParameter("id", "00000000");
		ocmd.Parameters.Add(bind_id);

		ord = ocmd.ExecuteReader();
		while (ord.Read()){
			Console.WriteLine(ord["id"] + "," + ord["name"]);
		}
		ord.Close();

		ocmd.Parameters.Remove(bind_id);
//
		ocmd.CommandText = "update t_sample set name=:name where id = :id";

		bind_id = new OracleParameter("id", "00000001");
		ocmd.Parameters.Add(bind_id);
		bind_name = new OracleParameter("name", "伊藤 花子");
		ocmd.Parameters.Add(bind_name);

		row = ocmd.ExecuteNonQuery();

		ocmd.Parameters.Remove(bind_id);
		ocmd.Parameters.Remove(bind_name);
		ocmd.Transaction.Commit();	// or .Rollback();
		ocmd.Transaction = connection.BeginTransaction();
//
		ocmd.CommandText = "select id,name from t_sample where id >= :id";

		bind_id = new OracleParameter("id", "00000000");
		ocmd.Parameters.Add(bind_id);

		ord = ocmd.ExecuteReader();
		while (ord.Read()){
			Console.WriteLine(ord["id"] + "," + ord["name"]);
		}
		ord.Close();

		ocmd.Parameters.Remove(bind_id);
//
		ocmd.CommandText = "delete from t_sample where id >= :id";

		bind_id = new OracleParameter("id", "00000000");
		ocmd.Parameters.Add(bind_id);

		row = ocmd.ExecuteNonQuery();

		ocmd.Parameters.Remove(bind_id);
		ocmd.Transaction.Commit();	// or .Rollback();
//
		ord.Dispose();
		ocmd.Dispose();
		connection.Close();
		connection.Dispose();

		return;
	}
}

MSSQLServer

using System;
using System.Data;
using System.Data.SqlClient;

public class AnyClassYouLike{
	static void Main(string[] args){

		SqlConnectionStringBuilder builder;
		SqlConnection con;
		SqlCommand com;
		SqlParameter parm_id;
		SqlParameter parm_name;
		SqlDataReader reader;
		SqlTransaction transaction;
		string sqlstr;

		builder = new SqlConnectionStringBuilder();
		builder.DataSource = "127.0.0.1";
		builder.UserID = "mito";
		builder.Password = "sqlserver";
		builder.InitialCatalog = "testdb";
		builder.ConnectTimeout = 15000;	// ms

		con = new SqlConnection(builder.ConnectionString);
		con.Open();
//
		sqlstr = "insert into t_sample (id,name) values(@id,@name)";
		com = new SqlCommand(sqlstr, con);
		com.CommandText = sqlstr;
		transaction = con.BeginTransaction();
		com.Transaction = transaction;
		parm_id = new SqlParameter("@id", "00000001");
		com.Parameters.Add(parm_id);
		parm_name = new SqlParameter("@name", "伊藤 太郎");
		com.Parameters.Add(parm_name);
		com.ExecuteNonQuery();
		com.Parameters.Remove(parm_id);
		com.Parameters.Remove(parm_name);
		com.Dispose();
		transaction.Commit();	// or .Rollback();
//
		sqlstr = "select id,name from t_sample where id >= @id";
		com = new SqlCommand(sqlstr, con);
		com.CommandText = sqlstr;
		transaction = con.BeginTransaction();
		com.Transaction = transaction;
		parm_id = new SqlParameter("@id", "00000000");
		com.Parameters.Add(parm_id);
		reader = com.ExecuteReader();
		while (reader.Read()){
			Console.WriteLine(reader["id"] + "," + reader["name"]);
		}
		reader.Close();
		com.Parameters.Remove(parm_id);
		com.Dispose();
		transaction.Commit();	// or .Rollback();
//
		sqlstr = "update t_sample set name=@name where id = @id";
		com = new SqlCommand(sqlstr, con);
		com.CommandText = sqlstr;
		transaction = con.BeginTransaction();
		com.Transaction = transaction;
		parm_id = new SqlParameter("@id", "00000001");
		com.Parameters.Add(parm_id);
		parm_name = new SqlParameter("@name", "伊藤 花子");
		com.Parameters.Add(parm_name);
		com.ExecuteNonQuery();
		com.Parameters.Remove(parm_id);
		com.Parameters.Remove(parm_name);
		com.Dispose();
		transaction.Commit();	// or .Rollback();
//
		sqlstr = "select id,name from t_sample where id >= @id";
		com = new SqlCommand(sqlstr, con);
		com.CommandText = sqlstr;
		transaction = con.BeginTransaction();
		com.Transaction = transaction;
		parm_id = new SqlParameter("@id", "00000000");
		com.Parameters.Add(parm_id);
		reader = com.ExecuteReader();
		while (reader.Read()){
			Console.WriteLine(reader["id"] + "," + reader["name"]);
		}
		reader.Close();
		com.Parameters.Remove(parm_id);
		com.Dispose();
		transaction.Commit();	// or .Rollback();
//
		sqlstr = "delete from t_sample where id >= @id";
		com = new SqlCommand(sqlstr, con);
		com.CommandText = sqlstr;
		transaction = con.BeginTransaction();
		com.Transaction = transaction;
		parm_id = new SqlParameter("@id", "00000000");
		com.Parameters.Add(parm_id);
		com.ExecuteNonQuery();
		com.Parameters.Remove(parm_id);
		com.Dispose();
		transaction.Commit();	// or .Rollback();
//
		con.Close();
		return;
	}
}

Socket通信(echo server (single thread))

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text.RegularExpressions;

public class AnyClassYouLike{
	static void Main(String[] args){
		string line;
		IPAddress ipAdd = IPAddress.Parse("0.0.0.0");
		int port = 1234;
		TcpListener listener = new TcpListener(ipAdd, port);
		listener.Start();
		while (true){
			TcpClient client = listener.AcceptTcpClient();
			Console.WriteLine("クライアント({0}:{1})と接続しました。",
				((IPEndPoint)client.Client.RemoteEndPoint).Address,
				((IPEndPoint)client.Client.RemoteEndPoint).Port);
			NetworkStream ns = client.GetStream();
			StreamReader sr = new StreamReader(ns, Encoding.UTF8);
			StreamWriter sw = new StreamWriter(ns, Encoding.UTF8);
			while ((line = sr.ReadLine()) != null){
				Console.WriteLine(line);
				sw.WriteLine(line);
				sw.Flush();
				if (Regex.IsMatch(line, "^shutdown")){
					break;
				}
			}
			sr.Close();
			sw.Close();
			ns.Close();
			client.Close();
			if (line != null){
				break;
			}
		}
		listener.Stop();
	}
}

Socket通信(echo client)

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

public class AnyClassYouLike{
	static void Main(String[] args){
		string line;
		string ipAdd = args[0];
		int port = int.Parse(args[1]);
		string str = args[2];
		TcpClient client = new TcpClient(ipAdd, port);
		Console.WriteLine("クライアント({0}:{1})と接続しました。",
			((IPEndPoint)client.Client.RemoteEndPoint).Address,
			((IPEndPoint)client.Client.RemoteEndPoint).Port);
		NetworkStream ns = client.GetStream();
		StreamReader sr = new StreamReader(ns, Encoding.UTF8);
		StreamWriter sw = new StreamWriter(ns, Encoding.UTF8);
		sw.WriteLine(str);
		sw.Flush();
		line = sr.ReadLine();
		Console.WriteLine(line);
		sr.Close();
		sw.Close();
		ns.Close();
		client.Close();
	}
}

Socket通信(echo server (multi thread))

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

public class AnyClassYouLike{
	static void Main(String[] args){
		IPAddress ipAdd = IPAddress.Parse("0.0.0.0");
		int port = 1234;
		TcpListener listener = new TcpListener(ipAdd, port);
		listener.Start();
		while (true){
			TcpClient client = listener.AcceptTcpClient();
			Task.Run(() => communicateClient(client));
			Console.WriteLine("クライアント({0}:{1})と接続しました。",
				((IPEndPoint)client.Client.RemoteEndPoint).Address,
				((IPEndPoint)client.Client.RemoteEndPoint).Port);
		}
		listener.Stop();
	}

	private static void communicateClient(TcpClient client){
		string line;
		NetworkStream ns = client.GetStream();
		StreamReader sr = new StreamReader(ns, Encoding.UTF8);
		StreamWriter sw = new StreamWriter(ns, Encoding.UTF8);
		while ((line = sr.ReadLine()) != null){
			Console.WriteLine(line);
			sw.WriteLine(line);
			sw.Flush();
		}
		sr.Close();
		sw.Close();
		ns.Close();
		client.Close();
	}
}