夕暮ログ

C#やJavascript、最近はAndroidなんかも好きなtinqのブログ。「夕暮れログ」

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

file:///やfile://localhost/、URLエンコードなどがされているパスをWindowsの形式に直す

ブラウザからローカルのファイル名をコピーしたり、ブラウザからexeファイルを叩いた場合などには通常のC:\hogeのような形のパスではなく特殊な形でパスが渡されることがあります。
具体的にはfileスキームがついたり、localhostがついたり、URLエンコードされたり、パスの区切りが/になっていたりします。
.NET Frameworkでは区切りが/ぐらいは大丈夫ですがfileスキームがついたりすると「System.ArgumentException: URI フォーマットはサポートされていません。」が発生してしまいます。

その場合、System.Uriクラスを使ってURIを解析することである程度解決できます。
newでインスタンスを作成して、LocalPathで使えるパスを取得できます。

Uri uri = new Uri("file:///C:/%e3%83%86%e3%82%b9%e3%83%88.txt");
MessageBox.Show(uri.LocalPath);

MessageBox.Show(new Uri("file:///C:/%e3%83%86%e3%82%b9%e3%83%88.txt").LocalPath);

これでだいたいはいけますが、file://localhost/C:/hoge.txtのような形だとホスト名がついて「\\localhost\C:\hoge.txt」のようにホスト名がついてしまます。
どうやら.NETはこの形にも対応していないらしく、例外が発生してしまいます。
なのでlocalhostがつくパスを受ける可能性のある時は別途それを取り除く処理が必要かもしれません。
その際にまちがってlocalhostという文字を含むディレクトリやファイル名を変えてしまわないように注意してください。
Uriクラスを使って解析後に正規表現なりで先頭の部分をとるのがいいかもしれません。

参考
System.Uri クラス - MSDN

ブラウザでC#のコードをコンパイルできるcompilify.net

compilify.NEThttps://compilify.net/

compilify.netはC#のコードをブラウザで手軽にコンパイルできるサービスです。
現在のところは何かをインストールしたり、登録をしたりする必要はなく、ページを開いた瞬間にすぐコードを実行できます。
動的にエラーチェックもしてくれるので、VisualStudioほどではありませんが便利です。

こちらのサイトに作者さんへのインタビューが記載されているのでぜひご覧ください。
Compilify – ブラウザで.NETのコードをコンパイルする - infoQ

続きを読む »

タイピングクラスのバージョンアップと、GUI版

少し前からやっている、タイピングクラスのバグ及び仕様を一部変更したバージョン1.1を公開しました。
こちらからダウンロードできます。
(2013/01/26 : 修正しました。Web拍手コメントでのご指摘ありがとうございます!)
今回の修正点は以下です。
・アルファベットが入力できないなどのいくつかの不具合の修正
・英字や数字、記号の入力を定数から定義ファイルに移動しました。
・判定を正規表現から総当り法に変更しました。記号などもユーザーが独自に追加できるようになりました。
ちなみにですが、定義ファイルにたとえば「ヴ」がなくて「ヴぁ」があったばあいでも、「ヴぁいおりん」ははじかれてしまいます。一文字づつしか判定されないと思ってください。

GUIタイピング


タイピングゲームのGUI版を公開しました。
GUIタイピング
最低限の実装です。
上のテキストボックス1に漢字が、下のテキストボックスにローマ字がはいっています。
ローマ字を打っていくと、だんだん下のテキストボックスから消えていきます。
問題文は、簡単なXMLから読み込まれます。
Question.xmlってやつです。これを書き換えればオリジナル問題ができます。

あとは、正解数、間違い数、時間も計っています。

あくまでサンプルレベルなので、たいした機能はないので注意。
このサンプルはver1.1のzipにも含まれています。
Form1には、textBox1、textBox2、listBox1の3つをおいてお好みでデザインを変えるだけです。
あとは、Form1のLoadイベントにForm1_Loadを設定してください。

公開しているファイルはForm1になっていますが、もちろん適当な名前に変えてもかまいません。

とりあえず、最低限の機能しかないので、ぜひ自分流な機能をつけてみてください。
あと、バグがあったら報告をお願いします!!!

C#で日本語タイピングができるライブラリを公開

とりあえず、バグらしいバグもないので公開します。

利用する方がいらっしゃるかわかりませんが、一応ライセンスはMITとしておきます。 隅っこに私の名前やサイト名を表示していただければ無制限に利用が可能です。

極力不具合がないよう確認していますが、正常に動作しない場合、バグがある場合はご報告ください。

<使い方>

  1. 普通のクラスのようにnewでインスタンスを作ります。複数のインスタンスを作ることも可能です。
  2. SetQuestionで問題文を設定します。
  3. Input関数で半角の入力を渡します。日本語の入力には対応していません。大文字、小文字は区別されません。
  4. Input関数からはInputResult列挙体で入力の結果が返ります。
    None無効値です。これが戻ることはありません。
    Good正しい入力です。入力は受け付けられました。
    Bad間違った入力です。
    CharEnd日本語の1音節文の入力が終わりました。「あ」「ちゃ」「っしゃ」などもこれが帰ります。1文字ではないので注意してください。取得する必要がある場合、Locationで位置をいろいろやればいいと思われます。
    CharEndNCharEndと同様ですが、「ん」の場合で、次に1度だけNを入力できます。
    CharEndNNCharEndNの後に、[N]が入力された場合です。CharEndNをCharEndと同じく処理したなら、これは無視するのがいいでしょう。
    StrEnd問題文の入力が完了しました。もちろん、CharEndよりも優先して戻ります。
  5. 入力候補や、ユーザーの入力した文字列などを取得するには、公開されているプロパティを利用します。

その他

問題文として使えるのは、以下です。
  • ひらがな
  • ヴ(ひらがなが存在しない音のため)
  • 英数字(全角、半角ともに対応)
  • 記号  []()<>,.!?-%+-=*:;/_"&'および、その全角
使える文字は、定義ファイル及び、変換テーブルを操作することで簡単に変更できます。
サポートされない文字列があった場合、NotSupportedExceptionが発生します。(これは普通のプログラムが発生させるべきものなのか?)
現在、候補表示の変更は対応していません。


詳しい仕様及びソースファイルは日本語タイピングクラスの使い方をご覧ください。

続きを読む »

日本語タイピングを作る際のテスト検査用パターン

少し前から作っていた日本語タイピングが大体できました。
現在、バグを洗い出しているところです。

ですが、日本語入力は複雑なので、結構デバッグが抜けてしまうことがあります。
ということで、私がテスト用に作ったパターンです。完全ではありませんが、これをいろいろな方法で入力してみてください。

おきなわ基本的なテスト
ふぉるだをしょうきょ拗音のテスト。[SHO][SYO][SHIXYO][SILYO]などのパターンも確認
にほんこく「ん」の基本テスト。んは、[N]と[NN]、[XN]のどれも入力可能
しゃんぱん拗音の後の「ん」と、「ん」終わり。「ん」終わりでは、Nを省略できない
んっちゃんん無意味に「ん」が重なった言葉と、拗音の混じり。んが続くときもNを省略できない。ただし、[nxn]はできる。
あさって促音の基本テスト
あんっちゃんふぁいる促音のいろいろなパターンでのテスト。んが前にあったり、「ちゃ」が後ろにあったり。
っあっんっなっぃ次の文字を連続して打てない組み合わせと、拗音。「あ」は、「AA」ではなく[XTUA]などになる。また、「っん」は[NNN]は無理。しかし、[XXN]はできる。んを例外処理しているとXXNの実装を忘れやすいかもしれません。
 に ん じゃ だ わかりにくいが、前後や文字の間にスペース。んの後のスペースにも注意。この場合、[NN]か[XN]とするのが自然化と思われる。スペースを入力しなくてよい処理をしている人向け。特に、ユーザーが問題文を作成できる場合、スペースが前後に入る場合もある。
がっし ょ うた い用音と、スペースが2個はいる場合。スペースを抜かす処理では、必ずスペースをすべて飛ばすようにしないとはまる。
かん!っじ。ょ?う記号いり。こんなのないと思っても一応テスト。
あrか「さ?た記号いり。アルファベットや、記号に対応していない人はやらないようにしましょう。こんなのないと思っても一応テスト。


ココには含まれていませんが、想定外の字(漢字や対応していない記号など)の場合に正常にはじけるかどうか確認してください。ケアミスでそのまま実行されてしまうと困ります。
特に、ユーザーが問題文を作れる場合は漢字などはもちろん、\bとか、\nなどの制御文字が入れられることがあるので、その際に不具合が出ないようにはじく処理を入れましょう。

配列にしたい人は下をコピーしてみてください。

"おきなわ",
"ふぉるだをしょうきょ",
"にほんこく",
"しゃんぱん",
"んっちゃんん",
"あさって",
"あんっちゃんふぁいる",
"っあっんっなっぃ",
" に ん じゃ だ ",
"がっし ょ うた い",
"かん!っじ。ょ?う",
"あrか「さ?た",

とりあえず、私が作った実装では全部正常に打てるようにしました。たぶん。これの確認でいくつかバグを見つけられました。
皆さんもよければこれらのパターンで確認してみてください。

--------
「ん」が連続する際に、xnを利用することができます。
たとえば、
「んん」を普通に打つと[nnnn]となります。しかし、xを使うと、[nxn]と3文字になります。
この使い方ができないバグがあったので修正します。読み仮名もとりあえず取得できるようになったので、もう少しで公開できそうです。

それにしても、xnは便利そうですね。自分でもxn派になろうかな?まぁ、「っん」も「んん」も打つ機会ほとんどないですけどね--;

あと、対応するかどうかは作者しだいですが、カタカナ表記しか存在しない「ヴ」の音も考慮したほうがいいと思われます。
「ヴぁいおりん」とか、「ヴぃーなす」とか。

« 前のページ  ホーム  次のページ »

プロフィール

tinq tinq(もしくはTinqWill)

Sky  For   Every 改装予定

プログラミングお勉強中の高校生。月一くらいは更新したい

最新記事

カテゴリ

月別アーカイブ

検索フォーム

最新コメント

リンク

最新トラックバック

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。