プロが教える店舗&オフィスのセキュリティ対策術

C言語→C#に変換

C言語からC#に変換したいのですが、わからないところがあります。
コマンドライン引数からファイル名とキーワードを入力して、キーワードがある行をアウトプットファイルに書き込むという処理です。
C言語のソースは、

main(int argc,char *argv[]){
FILE *fp;
FILE *fpp;
int i;
char KEYWORD[256];
char buf[256];

//(1)アウトプットファイルのオープン
fpp=fopen("output.txt","w");


for(i=1;i<argc-1;i++){
if(strcmp(argv[i],"-a")==0){
//(2)入力ファイルのオープン
if((fp=fopen(argv[i],"r"))==NULL){
printf("open error!\n");
exit(1);
}
}
//(3)キーワードの代入
if(strcmp(argv[i],"-b")==0){
strcpy(KEYWORD,argv[i]);
}
}
//(4)一行読み込む
while(fgets(buf,sizeof(buf),fp)!=NULL){
//(5)キーワードの条件で文字列抽出
if(strstr(buf,KEYWORD)!=NULL){
//(6)アウトプットファイルに出力
fprintf(fpp,"%s",buf);
}
}
//ファイルクローズ
fclose(fp);
fclose(fpp);
}

です。

(3)キーワードの代入と、(5)文字列抽出の部分がネットなどで調べてもよくわかりません。
分かる方いらっしゃいましたら教えていただけると幸いです。
宜しくお願いします。

.

A 回答 (3件)

変換というよりは「仕様を理解して作り直し」に近いでしょうねぇ。



コマンドライン引数を取るのは以下のURL参照。
http://dobon.net/vb/dotnet/programing/commandlin …

このURLでは見ての通りfor eachを使っていますが、これでは「今見ている引数の次の引数」が取れないので配列のプロパティcountを使ってforで回しましょう。

(5)は文字列の抽出というか、文字列内文字列走査ですね。

こちらはString.IndexOfを使って実現すればいいでしょう。
http://msdn.microsoft.com/ja-jp/library/k8b1470s …
    • good
    • 0
この回答へのお礼

非常に参考になりました。解決しました。
ご回答ありがとうございました。

お礼日時:2010/08/04 16:48

 CとC#じゃデータ型の扱い方とかかなり違ってくるから、質問者がどういうやり方でやろうとしているのかの方針を見せてくれないと、単にCのコードを示してわかりませんと言われても答えようがありません。



 例えば、文字列データはどういう形で持っているのか。

 Cには文字列型などという概念が無いのでchar型配列で文字列データを扱っていますが、C#にはstring型が用意されているので基本的にはこれを用います。C#のデータ型は基本的にはすべてクラスで定義されていますので、string型も実体はStringクラスなので文字列操作に関わるメソッドなどが用意されています。文字列の比較・抽出などはそれを用いるのが基本でしょう。
    • good
    • 0
この回答へのお礼

私の説明が抽象的すぎました、すみません。
参考にさせていただきます。
ご回答ありがとうございました。

お礼日時:2010/08/04 16:53

とりあえず元のコードは正しく動いていますか?



(2)は "-a" というファイルを開くということなのでしょうか?
(3)はかならず"-b"というKEYWORDになってしまいますがそうなのでしょうか?
    • good
    • 1
この回答へのお礼

(2)-aの次のコマンドライン引数をファイル名として開きます。

(3)-bの次のコマンドライン引数をKEYWORDとします。

私の説明不足でした、すみません。
ご回答ありがとうございました。

お礼日時:2010/08/04 16:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!