C#
数値/文字列
// 演算子による算術演算 ( 参照:演算子の優先順位 )
int N ;
N = 5 + 3 ; // 8 (加算)
N = 5 - 3 ; // 2 (減算)
N = 5 * 3 ; // 15 (乗算)
N = 5 / 3 ; // 1 (除算)
N = 5 % 3 ; // 2 (剰余)
N = 5 ;
N ++ ; // 6 (インクリメント)
N = 5 ;
N -- ; // 4 (デクリメント)
算術演算 (関数)
// 関数による算術演算
int N ;
N = Math.Abs (-12) ; // 12 (絶対値)
N = Math.Sign(-12) ; // -1 (符号)正数なら 1、ゼロなら 0、負数なら -1
N = Math.Max(12, 34) ; // 34 (大きい方)
N = Math.Min(12, 34) ; // 12 (小さい方)
double X ;
X = Math.Sqrt (2) ; // 1.414...(平方根)
X = Math.Pow (2, 6) ; // 64 (累乗)
X = Math.Log (12345) ; // 9.421...(基数 eの対数)
X = Math.Log10(12345) ; // 4.091...(基数10の対数)
// 整数型 の場合、0 での除算はできない → 例外が発生する!
// 浮動小数点型の場合、0 での除算はできる → 結果は「無限大」の定数!
int L ;
int M = 3 ;
int N = 0 ;
L = M / N ; // 例外が発生!
擬似乱数
// Random(擬似乱数ジェネレータ) を使って、ランダムに点描する
配置 Button ;
private void button1_Click(object sender, System.EventArgs e)
{
Invalidate() ; // Paint ハンドラの起動 → ここでは "Form1_Paint()"
}
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics grfx = e.Graphics ;
int X_max = this.ClientSize.Width - 1 ;
int Y_max = this.ClientSize.Height - 50 ;
grfx.FillRectangle(new SolidBrush(Color.Black), 0, 0, X_max + 1, Y_max + 1) ;
Random rand = new Random() ; // 時間に応じて決まるシード値で初期化
for (int N = 1 ; N <= 1000 ; N ++)
{
grfx.FillRectangle(
new SolidBrush(Color.Yellow),
rand.Next(X_max), // 0 以上で X_max より小さい乱数(整数)
rand.Next(Y_max), // 0 以上で Y_max より小さい乱数(整数)
2, 2) ;
}
}
// Note: double 型の乱数は NextDouble() を使う。0 以上で 1 未満の値を返す。
小数点以下の四捨五入
string A ;
double X, Y ;
// 四捨五入する(数値 → 数値)
X = 12.50
Y = (int)(X + 0.5) ; // 13
// 四捨五入する(数値 → 文字列) ☆ 書式指定 テスター
X = 12.50 ;
A = X.ToString("f0") ; // "13"("f0" の "0" は、小数点以下の桁数指定)
// 自分に最も近い整数を求める(丸め)
// 四捨五入と似ているが、.5 の場合は、偶数になるように丸める
X = Math.Round(12.49) ; // 12
X = Math.Round(12.50) ; // 12(四捨五入と異なる!)
X = Math.Round(12.51) ; // 13
X = Math.Round(13.49) ; // 13
X = Math.Round(13.50) ; // 14
X = Math.Round(13.51) ; // 14
小数点以下の切り捨て
double X, Y ;
// 小数点以下を切り捨てる
X = 12.51
Y = (int)X ; // 12
// 自分以下の整数を求める
X = Math.Floor ( 12.34) ; // 12
X = Math.Floor (-12.34) ; // -13
// 自分以上の整数を求める
X = Math.Ceiling( 12.34) ; // 13
X = Math.Ceiling(-12.34) ; // -12
型変換による精度保持
// 整数での算術演算の場合、精度の高い型に変換(キャスト)して演算する
int M = 5 ;
int N = 3 ;
double X = M / N ; // 1 (小数点以下の情報が失われる)
double X = (double)(M / N) ; // 1 (小数点以下の情報が失われる)
double X = (double)M / (double)N ; // 1.666... (OK!)
型変換によらない精度保持
// 整数での算術演算の場合、演算の順番に注意する → 除算は最後に行う!
int L = 2 ;
int M = 4 ;
int N = 6 ;
int J = L / M * N ; // 0(NG:除算を先に行ってはダメ)
int K = L * N / M ; // 3(OK:乗算を先に行う)
// Note: 乗算と除算は、演算の優先順位が同じなので、上記の場合、左から順に
// 評価(計算)される。
型変換の悪い例
// 精度の低い型への暗黙的変換は行えない
long L = 123456 ;
int M ;
int N ;
M = L ; // コンパイルエラーが発生!(精度の低い型への暗黙的変換)
N = (int)L ; // コンパイル OK! (精度の低い型への明示的変換)
// 精度の低い型への明示的変換でも注意が必要
long L = 123456789012 ;
int N ;
N = (int)L ; // -1097262572(int の表現範囲値を超えているので変な結果になる!)
内部変換誤差の蓄積
// 0.0001 を 10000 回 加算すると、ぴったり 1 になるか? → 浮動小数点ではNG!
float X = 0 ; // 32 bit 浮動小数点 型(有効桁 約 7 桁)
double Y = 0 ; // 64 bit 浮動小数点 型(有効桁 約 16 桁)
decimal Z = 0 ; // 固定小数点 型 (有効桁 約 29 桁)
for (int N = 1 ; N <= 10000 ; N ++)
{
X += 0.0001f ; // 結果 1.000054
Y += 0.0001 ; // 結果 0.999999999999906
Z += 0.0001m ; // 結果 1
}
// Note: decimal型では内部変換誤差は発生しないが、浮動小数点型では内部変換誤差が
// 発生することがあるので、注意すること!
// 数値を、10進数の文字列に変換する (ToString メソッドを使う)
int N ;
double X ;
string A ;
N = 123 ;
A = N.ToString() ; // "123"
X = 123.456789 ;
A = X.ToString() ; // "123.456789"
A = X.ToString("f2") ; // "123.46" (小数点以下2桁に四捨五入)
// Note: ToString() の引数は、書式指定(数値)を参照。
// 数値を、10進数の文字列に変換する (文字列の連結による自動変換を利用する)
int N ;
double X ;
string A ;
N = 123 ;
A = "" + N ; // "123"
X = 123.456789 ;
A = "" + X ; // "123.456789"
// Note: 二項演算子 + は、どちらかのオペランドが string 型の場合、文字列の連結を
// 行う。文字列でないオペランドは、仮想の ToString() メソッドで変換される。
// 数値(整数型)を、16進数の文字列に変換する
int N ;
string A ;
N = 123 ;
A = N.ToString("x") ; // "7b" (小文字で表示)
A = N.ToString("X") ; // "7B" (大文字で表示)
A = N.ToString("x3") ; // "07b" (小文字、3桁で表示)
N = 12345 ;
A = N.ToString("x3") ; // "3039"
N = -1 ;
A = N.ToString("x") ; // "ffffffff"
A = N.ToString("x3") ; // "ffffffff"
// Note: ToString() の引数は、書式指定(数値)を参照。
数値を2進数文字列に変換
// int 型を 2進数文字列に変換する(Convert クラスのメソッドを使う)
int N ;
string A ;
N = 123 ;
A = Convert.ToString(N, 2) ; // "1111011"
N = 123 ;
A = Convert.ToString(N, 2).PadLeft(32, '0') ; // 常に32桁に変換
// "00000000000000000000000001111011"
N = -1 ;
A = Convert.ToString(N, 2) ; // "11111111111111111111111111111111"
// int 型を 2進数文字列に変換する(自作コード) ; 結果は常に32桁
string int2bin(int x)
{
string A = "" ;
for (int N = 0 ; N < 32 ; N ++)
{
A = (((x & 1) == 0) ? '0' : '1') + A ;
x >>= 1 ;
}
return A ;
}
A = int2bin(123) ; // "00000000000000000000000001111011"
10進数文字列を数値に変換
// 10進数の文字列を、数値に変換する
int N ;
double X ;
string A ;
A = "123" ;
N = int.Parse(A) ; // 123
A = "-123" ;
N = int.Parse(A) ; // -123
A = "123.456789" ;
X = double.Parse(B) ; // 123.456789
A = "1.23e+005" ;
X = double.Parse(B) ; // 123000
// Note: Parse() の引数が不適切な場合、例外が発生する!
16進数文字列を数値に変換
// 16進数文字列を int 型に変換する(Convert クラスのメソッドを使う)
string A ;
int N ;
A = "9a" ;
N = Convert.ToInt32(A, 16) ; // 154
A = "0x9A" ;
N = Convert.ToInt32(A, 16) ; // 154 ; 先頭に"0x"があっても可、a〜fは大文字でも可
A = "0xffffffff" ;
N = Convert.ToInt32(A, 16) ; // -1 ; 結果は 32bit の int型
// Note: 文字列の先頭がマイナス記号'-'の場合、例外が発生する。
// Note: 9桁以上は OverflowException 例外が発生する! Convert.ToInt64 を使用せよ。
// 16進数文字列を int 型に変換する(自作コード)
int hex2int(string x)
{
x = x.ToLower() ;
if (x.IndexOf("0x") == 0) x = x.Substring(2) ;
int M = 0 ;
string A = "0123456789abcdef" ;
for (int N = 0 ; N < x.Length ; N ++)
{
M = M * 16 + A.IndexOf(x[N]) ;
}
return M ;
}
int N = hex2int("9a") ; // 154
2進数文字列を数値に変換
// 2進数文字列を int 型に変換する(Convert クラスのメソッドを使う)
string A ;
int N ;
A = "1001" ;
N = Convert.ToInt32(A, 2) ; // 9
A = "11111111111111111111111111111111" ;
N = Convert.ToInt32(A, 2) ; // -1(結果は 32bit の int型)
// 2進数文字列を int 型に変換する(自作コード)
int bin2int(string x)
{
int M = 0 ;
for (int N = 0 ; N < x.Length ; N ++)
{
M = M * 2 + ((x[N] == '0') ? 0 : 1) ;
}
return M ;
}
int N = bin2int("1001") ; // 9
数値を右詰めにする
// 数値を「右詰め」の文字列に変換する
string A ;
int X = 1234 ;
A = String.Format("{0, 6}", X) ; // " 1234" 6桁幅 右詰め
A = String.Format("{0,-6}", X) ; // "1234 " 6桁幅 左詰め
A = String.Format("{0, 3}", X) ; // "1234" 3桁幅 右詰め 桁数オーバーの例
A = String.Format("{0,-3}", X) ; // "1234" 3桁幅 左詰め 桁数オーバーの例
A = String.Format("{0, 8:d}" , X) ; // " 1234" 8桁幅 右詰め 10進数
A = String.Format("{0, 8:d6}", X) ; // " 001234" 8桁幅 右詰め 10進数6桁
A = String.Format("{0, 8:x}" , X) ; // " 4d2" 8桁幅 右詰め 16進数
A = String.Format("{0, 8:X}" , X) ; // " 4D2" 8桁幅 右詰め 16進数(英大文字)
A = String.Format("{0, 8:x6}", X) ; // " 0004d2" 8桁幅 右詰め 16進数6桁
// Note: String.Format() の詳細は、objectを文字列へ変換(3) を参照。
object を文字列へ変換
// object を文字列へ変換する各種方法
(1) 指定した object を、それと等価な String 形式に変換(書式指定可)
object.ToString([format])
(2) 指定した object を、それと等価な String 形式に変換
Convert.ToString(object)
Note: このメソッドは、object.ToString() と、同じ機能である。
ただし、object.ToString() では、「マーシャリング」関係で、コンパイル
エラーが発生する場合があるので、その時は、こちらを使うとよい。
(3) 指定した object(複数可)を、書式指定に従って、等価な String 形式に変換
String.Format(formats, object0[, object1[, object2[, ...]]])
formats: { N [, M ][: format ]} 形式を含む、書式指定の文字列。
N は、オブジェクト番号を示す 0 から始まる整数。
M は、値の幅(桁数)を指定する整数。余白部分は空白で埋められる。
M が負の場合、値は左詰め、正の場合、値は右詰めになる。
例: String.Format("{0} {1}", 123, 257) → "123 257"
例: String.Format("#{0,4:D}#{1,4:X}#", 123, 257) → "# 123# 101#"
// Note: format は、
書式指定(数値),
書式指定(日付と時刻),
書式指定 テスター
// を参照。
文字列で「\」文字を扱う
// 「\」文字は、エスケープシーケンスを示す記号なので、文字列に、それ「そのもの」
// を含めて設定する時は、下記のいずれかのように記述する。
string file_name = "C:\\abc\\def.txt" ; // \ は \\ と記述 ( " は \" と記述)
または、
string file_name = @"C:\abc\def.txt" ; // 頭に @ を付加 ( " は "" と記述)
// エスケープシーケンスは使用不可!
改行を含める場合は、
string message = @"This
is
a
pen" ;
のように、複数行で記述する。引用符の間にある文字は、全部そのまま解釈される。
文字列の文字長を取得
// 文字列の文字長を取得する
int N = ("abc日本語").Length ; // 6
// Note: 日本語も1文字(2バイト文字)を1字としてカウントする!
文字列のバイト長を取得
// 文字列のバイト長を取得する
using System.Text ; // for Encoding
int N = Encoding.GetEncoding("Shift_JIS").GetByteCount("abc日本語") ; // 9
文字の繰返し文字列を設定
// 指定文字を指定回数だけ繰返した文字列を設定
string A = new String('Z', 10) ; // "ZZZZZZZZZZ"
文字列の結合
// 複数の文字列を結合する
string A = "abc" ;
string B = "def" ;
string C ;
C = A + B ; // "abcdef"
A += "zzz" ; // "abczzz"
文字列の分割
// 文字列を、指定した区切り文字で分割する
string A = "abc:def:ghi" ;
string[] B = A.Split(new char[] {':'}) ; // B[0] = "abc"
// B[1] = "def"
// B[2] = "ghi"
// Note: 区切り文字を省略した場合、空白/改行コードが、区切り文字となる。
文字列の削除
// 文字列の中の特定部分を削除する
string A = "abcdefg" ;
int N1 = 2 ; // 削除する開始位置
int N2 = 4 ; // 削除する文字長
string B = A.Remove(N1, N2) ; // "abg"
// Note: 開始位置や文字長が不適切だと、例外が発生する!
文字列の抽出
// Substring() による文字列の抽出
string A = "abcde" ;
int N1 = 1 ; // 抽出する開始位置
int N2 = 2 ; // 抽出する文字長(省略可)
string B = A.Substring(N1) ; // "bcde"
string C = A.Substring(N1, N2) ; // "bc"
string D = A.Substring(5) ; // ""
string E = A.Substring(6) ; // 例外が発生!
// Note: 開始位置や文字長が不適切だと、例外が発生する!
// index による1文字(char)の抽出
配置 Button, TextBox ;
private void button1_Click(object sender, System.EventArgs e)
{
string A = "abcd" ;
for (int N = 1 ; N <= A.Length ; N ++)
{
textBox1.Text += N.ToString() + "番目の文字は " + A[N - 1] + " です\r\n" ;
}
}
文字列の検索 (一般)
// 普通の検索
string A = "abcdecd" ; // 被検索文字列
string B = "cd" ; // 検索文字列(見つかる例)
string C = "cc" ; // 検索文字列(見つからない例)
int D = A.IndexOf(B) ; // 2(最初の見つかった位置)
int E = A.IndexOf(C) ; // -1(見つからなかった)
int F = A.LastIndexOf(B) ; // 5(最後の見つかった位置)
// 正規表現による検索
using System.Text.RegularExpressions ; // for Regex
string A = "abcde777" ; // 被検索文字列
string B = "c[a-z]+" ; // 検索文字列(見つかる例)
Match match = Regex.Match(A, B) ;
int C = match.Index ; // 2 (最初の見つかった位置)
int D = match.Length ; // 3 (一致した部分の文字長)
string E = match.Value ; // "cde"(一致した文字列)
bool F = match.Success ; // true (一致したか)
// Note:「一致したか」は、Regex.IsMatch(被検索文字列, 検索文字列) メソッドも同様。
文字列の置換 (一般)
// 普通の置換
string A = "abcdefgcd" ; // 対象文字列
string B = "cde" ; // 被置換文字列 ("cde" を探して)
string C = "xxx" ; // 置換文字列 ("xxx" に置換)
string D = A.Replace(B, C) ; // ← "abxxxfgcd"
string E = A.Replace("cd", "xx") ; // ← "abxxefgxx"
// Note: 対象文字列に出現するすべての被置換文字列を、置換文字列へ置換する。
// 正規表現による置換
using System.Text.RegularExpressions ; // for Regex
string A = "abcdefg" ; // 対象文字列
string B = "[c-e]" ; // 被置換文字列('c','d','e'を探して)
string C = "x" ; // 置換文字列 ("x" に置換)
string D = Regex.Replace(A, B, C) ; // "abxxxfg"
string E = "ab12cd34" ; // 対象文字列
string F = "(?<name1>[0-9]+)" ; // 被置換文字列(数字列を探して)
string G = "X${name1}Y" ; // 置換文字列 (前後に "X", "Y" を挿入)
string H = Regex.Replace(E, F, G) ; // "abX12YcdX34Y"
// Note: 対象文字列に出現するすべての被置換文字列を、置換文字列へ置換する。
小文字/大文字へ変換
// 文字列を、小文字(または大文字)へ変換する
string A = "Test" ;
string B = A.ToLower() ; // "test"
string C = A.ToUpper() ; // "TEST"
文字列の空白を削除
// 先頭、末尾 の空白文字列を削除する
string A = " abc def " ;
string B = A.Trim() ; // "abc def" (両端の空白を削除)
string C = A.TrimStart() ; // "abc def " (先頭の空白を削除)
string D = A.TrimEnd() ; // " abc def" (末尾の空白を削除)
// Note: 第1引数(char[])を記述すると、それが削除対象文字セットとなる。
文字列に空白を追加
// 指定文字長になるまで、空白文字列を追加する
string A = "abc" ;
string B = A.PadLeft(5) ; // " abc" (左側に空白を追加)
string C = A.PadRight(5) ; // "abc " (右側に空白を追加)
// Note: 第2引数(char)を記述すると、それが追加文字となる。
文字列の配列をソート
// 文字列の配列をソートする
string[] str_array = new string[] { "dd", "bb", "aa", "cc" } ;
Array.Sort(str_array) ;
// 結果は下記のとおり
// str_array[0] == "aa"
// str_array[1] == "bb"
// str_array[2] == "cc"
// str_array[3] == "dd"
// 上記の要素の順序を反転するには、
Array.Reverse(str_array) ;
// 結果は下記のとおり
// str_array[0] == "dd"
// str_array[1] == "cc"
// str_array[2] == "bb"
// str_array[3] == "aa"
文字列をバイト配列へ変換
// 文字列を バイト配列データに変換する
using System.Text ; // for Encoding
string src = "ABCDEF" ;
byte[] dst = Encoding.ASCII.GetBytes(src) ;
// 実行結果
// dst[0] = 'A'
// dst[1] = 'B'
// dst[2] = 'C'
// dst[3] = 'D'
// dst[4] = 'E'
// dst[5] = 'F'
バイト配列を文字列へ変換
// バイト配列データを 文字列に変換する
using System.Text ; // for Encoding
byte[] src = new byte[] { (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E' } ;
int index = 1 ;
int length = 3 ;
string dst = Encoding.ASCII.GetString(src, index, length) ; // 実行結果 "BCD"
文字列のコレクション
// 文字列のコレクションは、文字列の配列と似ているが、
// あらかじめ要素の大きさを宣言しなくて良い
using System.Collections.Specialized ; // for StringCollection
StringCollection str_col = new StringCollection() ; // コレクションの宣言
str_col.Add("aa") ; // "aa" をコレクションの要素として追加
str_col.Add("bb") ; // "bb" をコレクションの要素として追加
str_col.Add("cc") ; // "cc" をコレクションの要素として追加
str_col.Add("dd") ; // "dd" をコレクションの要素として追加
foreach (string A in str_col)
{
/* コレクションの各要素を A に取り出して処理する */
}
// 文字列の先頭文字が数字か判定する
using System.Text.RegularExpressions ; // for Regex
string A = "123abc" ; // 判定対象の文字列
if (Regex.Match(A, "^[0-9]").Success)
{
/* 文字列 A の先頭が数字の場合の処理 */
}
// Note: 全角の数字も含める場合、正規表現の "^[0-9]" を "^\\d" に変更する。
指定の文字をカウント
// 文字列の中に、指定した文字がいくつあるか数える
// 'i' がいくつあるか数える
string A = "This is a pen." ;
int N = A.Split(new char[] {'i'}).Length - 1 ; // N ← 2
// 文字列 text に、文字列『 今日 or 明日 or 昨日 』が含まれるか判定する
using System.Text.RegularExpressions ; // for Regex
if (Regex.IsMatch(text, "(今日|明日|昨日)"))
{
/* 指定した文字列が含まれる場合の処理 */
}
1行目と2行目以降の分割
// TextBox のテキスト(文字列)を、1行目と2行目以降に分割する
using System.Text.RegularExpressions ; // for Regex
string text = textBox1.Text ; // テキスト全体の取得
string line_1 = text ; // 1行目のテキスト格納用
string line_2 = "" ; // 2行目以降のテキスト格納用
Match match = Regex.Match(text, "\n(.+)") ;
if (match.Success)
{
line_1 = text.Substring(0, match.Index + 1) ; // 行末の改行コードも含める
line_2 = text.Substring(match.Index + 1) ;
}
Tab コードを空白に置換
// TextBox のテキスト(文字列)中の Tab コードを、適切な文字長の空白に置換して、
// 結果を、文字列変数 text に入れる
using System.Text.RegularExpressions ; // for Regex
string text = "" ; // 置換結果を入れる
int tab_len = 8 ; // Tab を8文字単位で機能させる
foreach (string A in textBox1.Text.Split(new char[] {'\n'}))
{
string B = A ;
while (true)
{
Match match = Regex.Match(B, "\t(.*)") ;
if (match.Success)
{
B = B.Substring(0, match.Index) +
new String(' ', tab_len - match.Index % tab_len) +
match.Groups[1].Value ;
}
else
{
if (text != "")
{
text += "\n" ;
}
text += B ;
break ;
}
}
}
// Note: TextBox で Tab コードの入力を可能にするために、AcceptsTab プロパティを
// True にする必要あり。
改行コードの数を取得
// TextBox のテキスト(文字列)中の 改行コード "\n" の数を調べる
using System.Text.RegularExpressions ; // for Regex
int N = Regex.Matches(textBox1.Text, "\n").Count ;
文字列の改行コードを削除
// 文字列の行末の改行コードを削除する
string A = "abc def \r\n" ;
string B = A.TrimEnd(new char[] {'\r', '\n'}) ; // "abc def "
テキストを1行単位に分割
// テキスト(複数行の文字列) text を1行単位に分割して、文字列配列 line に入れる
string[] line = text.Replace("\r", "").Split(new char[] {'\n'}) ;
指定バイト長に削除/追加
// 日本語を含む文字列を、指定バイト長になるように削除/追加する
// 文字列が長い場合、語末の文字を削除する
// 文字列が短い場合、語末に空白を追加する
using System.Text ; // for Encoding
private string str_byte(string str, int len)
{
// str = 対象文字列
// len = 指定バイト長
Encoding enc = Encoding.GetEncoding("Shift_JIS") ; // 文字は Shift_JIS を想定
string A = str.PadRight(len) ;
string B = "" ;
int M = 0 ;
for (int N = len ; N >= 0 ; N --)
{
B = A.Substring(0, N) ;
M = enc.GetByteCount(B) ;
if (M <= len) break ;
}
if (M < len) B += " " ; // 空白追加
return B ;
}
文字列処理 (コマンドライン)
// textBox1 を「コマンドライン」とみなして、そこに入力された文字列を、
// コマンドと引数に分離し、textBox2 に [コマンド][引数] 形式で表示する
配置 Button, TextBox, TextBox ;
using System.Text.RegularExpressions ; // for Regex
private void button1_Click(object sender, System.EventArgs e)
{
string cmd ;
string arg ;
get_cmd(textBox1.Text, out cmd, out arg) ;
textBox2.AppendText(
textBox1.Text + "\r\n" +
"[" + cmd + "][" + arg + "]" + "\r\n" +
"\r\n") ;
}
private void get_cmd(string line, out string cmd, out string arg)
{
// 1行の文字列(line)から コマンド(cmd)と 引数(arg)を 抽出する
// Note: コマンドは、引用符で挟まれた形式でもOKで、
// この場合、引用符を除いて返す。
// 引数は、引用符を残して そのまま返す。
// Note:「//」以降は、コメントとみなす。
// たとえ、引用符で挟まれた中にあっても!
// ただし「://」は、コメント開始とは みなさない!
Match match ;
cmd = "" ;
arg = "" ;
// コメントの削除
match = Regex.Match(line, "[^:]//") ;
if (match.Success)
{
line = line.Substring(0, match.Index + 1) ;
}
if (line.IndexOf("//") == 0)
{
line = "" ;
}
// コマンドと引数の分離
line = line.Trim() ;
match = Regex.Match(line, "^\"([^\"]*)\"") ;
if (match.Success)
{
//「"cmd"」型
cmd = match.Groups[1].Value ;
arg = line.Substring(match.Length) ;
}
else
{
//「cmd」型
match = Regex.Match(line, "^([^ ]+)") ;
if (match.Success)
{
cmd = match.Groups[1].Value ;
arg = line.Substring(match.Length) ;
}
}
arg = arg.Trim() ;
}
文字列の半角/全角変換
// Visual Basic の StrConv 関数を使って、文字列を半角/全角変換する
// textBox1 の文字列を、半角変換して textBox2 に表示する
// textBox1 の文字列を、全角変換して textBox3 に表示する
配置 Button, TextBox, TextBox, TextBox ;
using Microsoft.VisualBasic ; // for Strings.StrConv()
private void button1_Click(object sender, System.EventArgs e)
{
// 半角へ変換
textBox2.Text = Strings.StrConv(textBox1.Text, VbStrConv.Narrow, 0x0411) ;
// 全角へ変換
textBox3.Text = Strings.StrConv(textBox1.Text, VbStrConv.Wide, 0x0411) ;
}
// Note: 上記、0x0411 は、日本語での Locale ID を示す。
// Note: "using Microsoft.VisualBasic ;" を有効にするためには 参照の追加 が必要。
// 具体的には、メインメニューで、プロジェクト → 参照の追加... を選択して、
// .NET のコンポーネント名「Microsoft Visual Basic .NET Runtime」を追加する。
// Note: 下記のような変換も可能。
// 全角カタカナ → 全角ひらがな 変換 = VbStrConv.Hiragana
// 全角ひらがな → 全角カタカナ 変換 = VbStrConv.Katakana