C#でDNAの相補鎖を出すプログラム(2)
のC言語のソースの理解と、C#への翻訳?の続き。
—————————————–
/*DNA配列を入力*/
printf("Input DNA array –>");
fgets(DNA,MAXLEN,stdin);
—————————————–
●printf (C言語)
→(C#)
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
●fgets(C言語)
→(C#) StreamReaderクラスを使う?
http://dobon.net/vb/dotnet/file/readfile.html
ストリームを使ってテキストファイルを読み込む
http://msdn.microsoft.com/ja-jp/library/system.io.streamreader.aspx
StreamReader クラス
http://www.divakk.co.jp/aoyagi/csharp_winexe_04.html
ファイルを読み込む
(ファイル-開くメニューと開くボタンがクリックされたら実際にファイルを読み込んでテキストボックスに表示するプログラムのソースコード)
http://www.atmarkit.co.jp/fdotnet/dotnettips/036fileread/fileread.html
テキスト・ファイルの内容を読み込むには?
本当は、
こういった感じにしたい。(目標1)
その前段階として、
「カレント・ディレクトリにあるシフトJISのファイル「readme.txt」を文字列に読み込み、それを画面に表示する。」
プログラムを理解したい。
http://www.atmarkit.co.jp/fdotnet/dotnettips/036fileread/fileread.html
(引用ここから)
—————————————–
using System;
using System.IO;
using System.Text;
class FileRead1 {
static void Main() {
StreamReader sr = new StreamReader(
"readme.txt", Encoding.GetEncoding("Shift_JIS"));
string text = sr.ReadToEnd();
sr.Close();
Console.Write(text);
}
}
—————————————–
(引用ここまで)
このプログラムの Console.Write(text);の直前までコピーすれば、「text」に、readme.txtの内容が代入された状態になっているとおもわれる。
例外発生時に備えて、例外処理を追加しておいたほうがいいらしい。
(引用ここから)
—————————————–
using System;
using System.IO;
using System.Text;
class FileRead3 {
static void Main() {
string text = "";
try {
using (StreamReader sr = new StreamReader(
"readme.txt", Encoding.GetEncoding("Shift_JIS"))) {
text = sr.ReadToEnd();
}
Console.Write(text);
} catch (Exception e) {
Console.WriteLine(e.Message);
}
}
}
—————————————–
(引用ここまで)
●値の入出力に関しては、もっと(目標1)に近い説明があった。
http://ufcpp.net/study/csharp/st_consoleio.html
値の入出力
—————————————–
入力
C#でユーザーからの入力を受け取りたい場合、 Console.ReadLine というものを使います。
var str = Console.ReadLine(); // ユーザーの入力した文字列を1行読み込む
—————————————–
—————————————–
出力
計算結果などを出力したい場合には Console.Write というものを使います。
int m = 1, n = 3;
Console.Write("m = {0}, n = {1}", m, n); // 文字や数値の出力
—————————————–
http://ufcpp.net/study/csharp/st_consoleio.html
のプログラムを実行してみた。
C# 3.0 から、var キーワードを使って、型を明示せずに変数を定義できるようになったらしい。
http://ufcpp.net/study/csharp/st_variable.html
これで、コマンドプロンプト(コンソール アプリケーション)上で、文字列を入力してもらい、そのまま出力することはできるようになった。
(まだ、出力されたテキストのコピペはできない)
(↑入力された塩基配列をそのまま出力するプログラム)
●switch文について
http://ufcpp.net/study/csharp/st_branch.html#switch
上記のように、switch文を使おうとしたら、下の「エラー一覧」に、
「型’char’を型’string’に暗黙的に変換できません」
というエラーが出てしまう。変数もなんだかよく分からない状態だったので、少し調べたら、
string : 文字列
char : 1文字
であるらしい。これを理解するのに少し時間がかかった。。。
http://www.atmarkit.co.jp/fdotnet/dotnettips/899charstring/charstring.html
文字と文字列を変換するには?
———————————————–
文字列(string型)から1文字(char型)への変換
文字列(内の1文字)をchar型の文字に変換するには、Stringクラスで定義されているインデクサを用いればよい。
インデクサを使えば、文字列中の任意の1文字を取り出すことができる。
これは、C#では角カッコ“[…]”を文字列変数の直後に記述して使用する。
———————————————–
●(続き)
http://chiebukuro.spn.yahoo.co.jp/detail/q1068241890
の以下の文をなんとかC#で書きたい。。。
●関係演算
http://ufcpp.net/study/csharp/st_operator.html#arithmetic
x != y → x が y と異なるかどうか
●「n」って何? → NULL? ぬるぽ? ? ?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1019592375
●j++ → 要は、jに1を加えなさいということらしい。。。
http://ufcpp.net/study/csharp/st_operator.html#inc
———————————————-
x++
後置きインクリメント
int a = 5;
int b = a++; // a は 6 に、b は 5 になる。
———————————————-
なんだかよくわからず、、、今日はここまで。
「プロパティまたはインデクサー’string.this[int]’は読み取り専用なので、割り当てることはできません。」
とエラーが出てしまって、お手上げ!
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_012/csharp_abc02.html
インデクサとプロパティ
を見て、途中に「set」を入れようとすると、setなんてありませんよとエラーが出てしまう。全く分からん。
http://ufcpp.net/study/csharp/lib_string.html
文字列関係
// Replace … 文字列の置換
Console.Write(s.Replace("Play", "View") + "n");
http://program571.blog91.fc2.com/blog-entry-24.html
文字列の任意の文字を置換する
→StringクラスのReplaceメソッドを使用するらしい。。。???
→しかし、これだと、文字列中の1種類しか変換できない。
aをtに、tをaに、gをcに、cをgに同時に変換するためには、1文字目から順番に処理するしかなさそう。。。
http://msdn.microsoft.com/ja-jp/academic/cc998600
文字数の取得メソッド
http://jeanne.wankuma.com/tips/csharp/string/replace.html
文字列を置換する