• 締切済み

C 単語 読みとり 比較 辞書

英語のつづりをチェックするプログラムがつくりたいのですが、うまくいかないのでどなたかご教授いただけると幸いです。 言語:C言語 OS:UNIX (1)指定されたテキストファイルを読み込む。 (2)自分で作った辞書ファイルの中に有る単語と比較する。    辞書ファイル各行に1単語のみ。単語の終わりには¥nが行変換のために必ずつけられてるとする。 (3)もし、辞書ファイルに登録されている単語であれば次の単語へ。    そうでなければ出力として表示する。 (4)付加機能として辞書ファイルの指定、大文字で書かれた単語を無視する機能をつける。 例)プログラムの名前をenglishとすると english textfile english capital textfile english capital dictionaryfile textfile だいたいの感じは伝わったでしょうか?? よろしくお願いします。

みんなの回答

回答No.5

つまり、オプションの付け方をどうしようかで悩んでいらっしゃると言うことですね。 指定テキストファイルは必ず記述するんですから、そのまんま書く方が良いですね。 辞書ファイルについては、 gcc の -o オプションのようにしてみてはいかがでしょう? [-d DictionaryFile] という具合に、 -d オプションの後ろに来た文字列は辞書ファイル名と判断させるんです。perl の -e オプションなんかも似たような形式ですね。 あと、大文字無視のオプションは -C とか言った形式にした方が分かりやすいんじゃないかと思います。 $ english [-C] [-d DictionaryFile] TextFile 一つの提案ですが、こんな方法もあると言うことで。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

>english textfile [-Ccapital] [-Ddictionaryfile] >第3パラメータ以降で先頭が-Cならcapital -Dならdictionaryfile >が指定されたことにすれば良いでしょう。 のつづきですが >例として、もしユーザーがdictionaryfileの名前を”jisyo”としたら >english capital jisyo.txt textfile.txt >このような風になります。 これを english textfile.txt -Ccapital -Djisyo.txt と入力させて 第3パラメータは-Cで始まるので、最初の-Cを削除し、 capitalが指定されたとみなす 第4パラメータは-Dで始まるので、最初の-Dを削除しjisyo.txtが指定されたとみなす という意味です。 一般的には、オプションが最初にくるので [-Cxxx] [-Dyyy] english textfileの方が、見栄えは良いですが、 その分引数の処理が面倒になるので english textfile [-Cxxx] [-Dyyy] の形式で良いかと思います。

seekinhelp
質問者

補足

>english textfile.txt -Ccapital -Djisyo.txt >と入力させて >第3パラメータは-Cで始まるので、最初の-Cを削除し、 capitalが指>定されたとみなす >第4パラメータは-Dで始まるので、最初の-Dを削除しjisyo.txtが指>定されたとみなす ううん。。。 自分としてはそのまま辞書ファイルはそのままの名前でタイプしてもらう方がいいなぁと思っています。 でも、この考え方は思いつかなかったのでぜひ参考にさせていただきます。 ご意見ありがとうございます。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

>今わからないのはenglish capital textfileのようにtextfileが必ずしも2番目の位置にないので、どのようにしてtextfileを指定するのかがわかりません。 考え方をかえて english [capital] [dictionaryfile] textfile の指定方法を english textfile [capital] [dictionaryfile] にしてはいかがですか パラメータ数が2つなら、english textfile パラメータ数が3つなら、english textfile capital パラメータ数が4つなら、english textfile capital dictionaryfile ではだめですか? もし、パラメータ数が3つで、english textfile dictionaryfile を指定したいなら例として以下のようにします。 english textfile [-Ccapital] [-Ddictionaryfile] 第3パラメータ以降で先頭が-Cならcapital -Dならdictionaryfile が指定されたことにすれば良いでしょう。

seekinhelp
質問者

補足

>english textfile [-Ccapital] [-Ddictionaryfile] >第3パラメータ以降で先頭が-Cならcapital -Dならdictionaryfile >が指定されたことにすれば良いでしょう。 説明が不十分でした。 capitalの場合はそれでもかまわないのですが、dictionaryfileの部分はユーザーが指定する辞書ファイルの名前が打ち込まれます。 例として、もしユーザーがdictionaryfileの名前を”jisyo”としたら english capital jisyo.txt textfile.txt このような風になります。 説明不足で申し訳ありませんでした。

回答No.2

作成内容はだいぶ具体的になっているようですね。 どのように考えて、何が分からないのか、補足をお願いします。 とりあえず、使う関数は fopen fgets fseek fclose あたりです。 あとstrcmpだと改行文字の扱いがちょっと面倒だから、自前で文字列の比較関数を作ってしまった方が楽ですね。

seekinhelp
質問者

補足

今わからないのはenglish capital textfileのようにtextfileが必ずしも2番目の位置にないので、どのようにしてtextfileを指定するのかがわかりません。 int main(int argc, char* argv[]){ char text[102]; char dic[52]; dic[] = "~/usr/dictionary/"; char *tp; int english(FILE *fp_text, FILE *fp_dic){ if (argc 2 <||> 5 argc){ printf("this is error\n")} switch(argc){ case 1: /* no argument is supplied */ fgets(buf, 102, fp_text) if ((fp_text = fopen(argv[1], "r")) == NULL) {printf(stderr, "english: file %d can not be opened\n", argv[1]); break; } else while (fgets(buf, 102, fp_text) != NULL) { /*read each line untill the end*/ char *dest; dest = strtok( buf, " ,:" ); while ( dest != NULL ) { dest = strtok( NULL, " ," ); if (dest != NULL) strcmp(dest, fp_dic); } } fclose(fp); /* close the file */ return 0; } case 2: /* argument is capital */ if(strcmp(argv[1],"capital") == 0){ fgets(argv[0], 102, fp_text) if ((fp_text = fopen(argv[1], "r")) == NULL) { printf(stderr, "english: file %d can not be opened"/n, argc); exit(4); break; } else while (fgets(text, 102, fp_text) != NULL) { fgets(text, 102, fp_text) /*read each lines untill the end*/ char *dest; dest = strtok( buf, " ,:" ); while ( dest != NULL ) { dest = strtok( NULL, " ," ); if (dest != NULL) strcasecmp(dest, fp_dic); } } fclose(fp); /* close the file */ return 0; break; } case 3 /* dictionary file is defined */ fgets(argv[0], 52, fp_dic) if((fp_dic = fopen(argv[1], "r")) == NULL) { printf(stderr, "english: dictionary file %d can not be opened"/n, argc); exit(3); } else tp = strtok( str, " ." ); while ( tp != NULL ) { tp = strtok( NULL," ." ); if ( tp != NULL ) if (strcmp( tp,argv[1] ) == 0){ puts(tp); } }

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

> 例)プログラムの名前をenglishとすると > english textfile > english capital textfile > english capital dictionaryfile textfile これらの3つの実行例が、どの機能と対応していますか? オプションのtextfileは、指定するテキストファイルのことですか? capitalは、大文字を無視する、という意味のオプションですか? dictionaryfileは、指定する辞書ファイルのことですか? english dictionaryfile textfile という実行例はあり得ますか?あり得る場合、 english textfile との違いはどこにありますか?

seekinhelp
質問者

補足

>これらの3つの実行例が、どの機能と対応していますか? >オプションのtextfileは、指定するテキストファイルのことですか? >capitalは、大文字を無視する、という意味のオプションですか? >dictionaryfileは、指定する辞書ファイルのことですか? はい、全てその通りです。 >english dictionaryfile textfile >という実行例はあり得ますか? この実行例もあり得ます。 >english textfile >との違いはどこにありますか? この場合はtextfileと自分で作成したデフォルトの辞書ファイルと比較しますが、dictionaryfileが指定されていればその辞書ファイルと比較します。 補足 english [capital] [dictionaryfile] textfile []の中のものはオプションです。 dictionaryfile:ここには実際に指定する辞書ファイルの名前がはいります。 textfile:辞書ファイルと比較するファイル。これも上と同じで実際にはファイルの名前をタイプします。

関連するQ&A

  • 辞書ツールの単語が表示されません

    辞書に登録してある単語の確認や修正をする為にXPのIME辞書ツールを開きますと単語が読みで あ~と までしか表示されません。 もちろん表示されない と 以下にも登録単語はあります。 プロパティにある修復の機能も試しましたが改善されず 登録単語が多いと一部が表示されなくなるという説明もネットで拝見しましたが登録単語数も少なく表示できない程の単語が登録されていません。 ツール(T)からの抽出も読みの抽出範囲も指定されていませんし あ~ん を仮に指定してもやはり と の欄の途中までしか表示されません。 全ての登録単語が表示される修正方法をご存知の方宜しくお願い致します。

  • 辞書ツールの単語登録ができなくなりました

    単語登録の失敗となってしまいます ファイルが壊れたとかいうのを見て元を削除して作り直そうとするんですが appdata~~ imjp10u.dicが辞書ファイルだと思うのですが これを消そうとすると「Tabtipが使用中のため消せません」となってしまい 削除できません タスクマネージャーにTabtipの項目は無いのでバックグラウンドでなんか動いてるかよくわかりません セーフモードがうんたらとか言うのも見たのでセーフモードで起動して削除しようと試みましたが 「プログラムが使用中のため消せません」となってしまいやっぱり消せません OSはウィンドウズ7です どうやったら辞書ツールを使えるようにできるんでしょうか

  • Atokのユーザー辞書に、複数の単語をまとめて登録する方法

    Atok12を使っています。 ユーザー辞書への単語登録機能がありますが、これに、複数の単語を一括登録する方法はあるのでしょうか? たとえば、テキストファイルに読みと単語を書き出して、一括で取り込む・・・ような方法です。

  • 辞書ツールの応用でしょうか?

    はじめまして 早速なのですが、http://monoroch.net/gallery/oyashiro/index.html にある(勝手に載せてしまってすいません)質問をすると返答してくれる プログラムを使用したいということなのですがいろいろ検索してみたんですが 構成方法とかがでてきませんでした。 こういう風にできるソフトか何かあるのでしょうか?自分で作ってみたいのですが・・・ おそらく辞書のCGIだと思うのですがどなたか情報を持っておりませんか? 教えてくださると助かります 最後に、ここのサイト様にあるように自分しか単語編集ができなく、尚且つ ほかの人からうけた質問を自分で見れるような機能を付加できるようなものがいいです 自分勝手ですいませんがよろしくお願いします。ではご返答お待ちしております。

  • 単語登録をショートカット化したい

    デスクトップが狭いノートで言語バーが邪魔なので消しています。 しかし単語登録は割と頻繁にするため、そのたびに言語バーを表示させて登録していて面倒なので、単語登録のウインドウをワンクリックで表示できるようショートカットを作りたいのですができません。 さらにユーザー辞書を種類別に複数作っているので、言語バー表示後も 1.言語バーの単語登録アイコンをクリック 2.「辞書ツール」をクリック 3.「ファイルを開く」で辞書のリストを表示 4.登録したい辞書を選んで開く 5.登録ボタンをクリックして登録画面を出す という面倒な行程を踏んでいます。 これを目的の辞書ごとにショートカットを作ってデスクトップ置き、ダイレクトにアクセスできればと思っています。 何か良い方法はないでしょうか? よろしくお願いします。 ※OSはXPpro SP2です。

  • Microsoft IME 辞書ツール の 単語/用例の登録 について

    毎度お世話になっております。 Microsoft IME 辞書ツール の 単語/用例の登録 でよく使う文書や単語を一文字で変換できるよう使ってます。思い立ったときとか結構頻繁に使うため簡単に起動させたいのですが、何かよい方法は無いのでしょうか?今は 言語バー → 単語/用例の登録 と起動させていますが、場合によっては言語バーのツールボタンがグレーアウトして使えないときがあったり(メモ帳等を起動すれば使えますが(^^ )するので、もしもショートカットキーがあったりとかするなら教えて頂きたいのです。 単語/用例の登録 をスタートボタンに追加すればと思いプログラムを探そうとしましたが見つけることも出来ませんでした。 皆様の良きアドバイスお待ちしております。 スペック:WindowsXP Professional Service Pack 2

  • linuxからC言語のコンパイラー使えますか?

    仕事でunixからC言語のコンパイラーをつかっています。 WindowsXPからC言語となるとすぐVISUALC++を想像してしまい 単純なunixでつかっているようなものが見当たりません。 linuxはつかったことないのですが、unixと似ているとききました。 unixと同じく標準でcコンパイラーは付属しているのでしょうか? ちなみにC言語を使いテキストファイルを編集(並び替えやあるワードの抜き出しやあるワードの置換)するプログラムを組み実行しています。

  • 既存のCプログラムをMS Visual C++へ移行して実行したい

    同じような質問がでていましたら、すみません。 いままでWS(unix)で作っていたC言語のプログラムをWindowsで実行しようと しています。 Microsoft Visual C++ 6.0 Proを購入し、 新規でプロジェクトを作成するところで止まってしまいました。 「プログラムをコンパイルして、あるバイナリファイルを読み込み、 指定したファイルへ結果を書き込む」 という操作がしたいのですが、プロジェクトの種類はどれにすればいいのでしょうか? また、ファイルを読み込む際、メインと関数は別のファイルになっているの ですが、コンパイルはどのように指定すればいいのでしょうか? もうひとつ、今までargv[]で入出力ファイルを指定していました。 # (メイン)(入力ファイル) (出力ファイル)のように この処理はVC++でできるのでしょうか? VC++の入門の本を購入したのですが、Cのプログラムについては なかなか載っていないので困っています。 よろしくお願いします。

  • cでunixコマンドってどう使うんですか?

    c言語でプログラムを書いているのですが、 ファイルを連結するためにunixコマンドのcutコマンドを使用したいんですが、どのようにしたら使用できますか。どうかご教授ください。

  • 電子辞書購入

    今年の春に大学生になったものですが質問よろしくお願いします。 高校生の時までは知人に頂いた高校生用の電子辞書を使用しておりましたが、大学生になり難しい単語も増えたので新しい電子辞書の購入を考えております。今までのでも多少は使えますが、音声機能がなく単語の発音などがわかりません。 なので音声機能がついていて、第2言語として中国語も習っているので中国語が収録されているものでおすすめの電子辞書を紹介していただけないでしょうか? ちなみに大学の生協でも販売していましたが、3万円くらいします。大学4年間使うと考えたら安いのかもしれませんがどうなんでしょうか?大学が紹介しているものがやはり一番適しているのでしょうか? 大学生協 CASIO EX-WORD AZ-B9800 SII SL903XB それと電子辞書の機能についてもう一つ質問をお願いしたいんですが、電子辞書の機能に英語の熟語を入力するとその意味が出てくるといった機能はありますか?説明がへたくそで申し訳ありません・・・普通なら単語を一つ入れるとその意味が何個か出てきますが、2~3語の単語を入れて熟語にしてから検索する。わかりますでしょうか? ご存知の方おられましたらよろしくお願いします。

専門家に質問してみよう