ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Posts Tagged ‘文字入力

C# プログラミング – Visual Studio 2017 で作る Windows Form アプリケーションで起動時にテキストファイルを読み込む。

leave a comment »

教科「情報」の「情報の科学」の授業で、定期的に文字入力のトレーニングをするための簡単なプログラムを作っている。あらかじめ登録されたテキストと同じテキストをテキストボックスに入力し、正しく入力できたか、何文字入力したか、入力にかかった時間は何分何秒か、を記録するトレーニングツールだ。

文字入力トレーニングソフトの画面_mid_640

フォームのイメージはこんなかんじ。テキストボックスは「開始」のボタンが押されるまでは使えないようにしておき、「開始」で時間を計測する。「終了」で時間の計測を終え、入力できた文字列を評価する。

このプログラムを生徒に配布するのだが、入力原稿に相当するテキストを、その都度プログラム内に保存しなければならない。このとき、原稿テキストをテキストファイルにしておき、プログラムを起動するときに読み込むようにした。テキストファイルはプログラムと同じフォルダに置いてもいいが、ファイルが丸見えでは触られてしまう可能性が高いので「settings」フォルダの下に入れることとした。

文字入力トレーニングソフトの画面_002_mid_640_480

プログラムでテキストファイルを読み込むコードは次のとおりだ。

—————————————————————————-

myFileName = @"settings\inputtext.txt"; //テキストファイルの場所を示す
enc = System.Text.Encoding.GetEncoding("shift_jis"); //エンコーディングを指定

//テキストファイルの読み込み
try
{
    myInputTextString = System.IO.File.ReadAllText(myFileName, enc);
}
catch
{
    MessageBox.Show("テキストファイルがありません");
}

—————————————————————————-

これで、生徒にプログラム本体とテキストファイルが入った「settings」フォルダを一緒に配布すればいい。

C# – 文字列を比較するアルゴリズムについて考える(1) – 2つの文字列を前から順に比較し、違いがあった位置を見つけるアルゴリズム

leave a comment »

学校の授業で文字入力のトレーニングをするために、効果的なアプリケーションを作っている。ここで必要な実装として文字列比較がある。

仕様、というか、個人で作るアプリケーションなので厳密な仕様は決めないが、イメージ的にはこうだ。入力トレーニングの元になる文がある。この文は、フォントやポイント、文字飾りなどは無視し、単にテキスト文字列だけのものとする。つまり単なるテキスト文とする。この文と同じ文をキーボードから入力するトレーニングとし、入力にかかった時間と入力できた文字数をカウントしてスコアとする。このとき、入力を間違ったことを評価に加えたい、というものだ。

すぐに思いつくのは、文字列を前から順番に比較し、違いがあったら位置を見つけ出すアルゴリズムだ。2つの文字列が myStr1 と myStr2 に入っており、2つの文字列の長さが同じだとする。

——————————————————————

for (int i = 0; i < myStr1.Length; i++)
{
    if (myStr1[i] != myStr2[i])
    {
        myStrDiff = i;
        break;
    }
}

——————————————————————

前から順に比較し、違いがあった文字でループを抜ける。前から何文字目であったかが myStrDiff に数字として入る。この数字は 0 から始まるので、実際は +1 文字目に違いがあった、となる。これだと、たとえば次のようになるだろう。

myStr1 = "あいうえおかきくけこ";
myStr2 = "あいうえおまきくけこ";

このとき、myStrDiff の値は 5となる。前から 6文字目に違いがあるからだ。しかし、「か」を「ま」と間違えてはいるが、そのあとはちゃんと入力できている。つまり「5文字目までしか間違いなく入力できなかった」のではなく「6文字目だけ間違えたが、それ以外はちゃんと入力できた」はずだ。つまり、このように評価すべきだろう。

入力すべき文字列 ・・・ あいうえおかきくけこ
実際の入力1 ・・・・・ あいうえおかきくけこ (評価10点:満点)
実際の入力2 ・・・・・ あいうえおまきくけこ (評価9点:1文字だけ間違った)
実際の入力3 ・・・・・ あいうえおまみむめも (評価5点:5文字間違った)

つまり、間違った文字以降をどう再判定するか、を考えなければならない。このアルゴリズムについて引き続き考えていきたい。