電子書籍の厳選無料作品が豊富!

コマンドライン引数の区別【C言語】

コマンドラインから二つの引数(ファイル名)を渡すとき、順番が替わっても大丈夫なようにして、それぞれファイルオープンをしたいです。(エラーで”順番が違います”と出力するのはNGです)
どうしたら区別できますか。分かる方いらっしゃいましたらご教授願います。
サンプルコードを書いていただけると幸いです。
宜しくお願いします。

A 回答 (6件)

コマンドで指定する入力ファイルと出力ファイルの順を自由にするということなら、コマンドラインを明確にする手法としては次のような仕様にする方法があります。


command -i input_file_name -o output_file_name
あるいは
command -o output_file_name -i input_file_name
とコマンドラインを書かせる。

この仕様なら、コマンドライン引数argvを順にみていって、例えばargv[1]が"-i"ならargv[2]には入力ファイル名が入っているし、argv[1]が"-o"ならargv[2]には出力ファイル名が入っている。そういうどちらの場合でも解釈できるコマンドラインオプションの解析をするプログラムを書くだけです。
Cではコマンドライン解析を簡単にする標準ライブラリはなかったと思うので、自作するか、適当なものをネットで見つけてください。

そういうのでなく、二つ並べた名前から一方は入力で一方は出力だと判断するのは、追加情報がなければ一般的に無理です。
    • good
    • 0
この回答へのお礼

おかげ様で無事解決できました。
ご回答ありがとうございました。

お礼日時:2010/07/29 18:03

補足によってようやく意図している事はわかった。



しかし、まだまだ仕様検討の段階で、コード化するのは早計ですね。

Aファイル、Bファイル、それぞれ存在するとき存在しないときにどうするか?

特に出力ファイルが既に存在する場合には、黙って上書きか?追記するのか?それともエラー扱いか?それともファイル名を派生させて新規作成するのか?

そもそも、出力ファイル名を入力させること自体が適切か?という考えもある。

何か規則に従ったファイルとして出力しなければならないのなら、その規則でロジック内で自動生成する方法もあるし、規則が明らかなら入力されたファイル名をチェックする事も可能。

何かの課題に単純に答えるだけじゃなくて、どうしたら効率的か?使いやすいか?事前にミスを防げるか?
そういう観点で仕様を詰めていければいいね。
    • good
    • 0
この回答へのお礼

回答者様のおっしゃるとおり、仕様が曖昧な状態でのコード化は早計でした。
仕様を詰めていって解決できました。
ご回答ありがとうございました。

お礼日時:2010/07/29 18:02

2つ引数が与えられて、一方は入力ファイル名、一方は出力ファイル名、どっちが先に引数で渡されるか分からない、ということだから、入力ファイルは必ず存在しますよね。


で、出力ファイルは普通は存在しない(しれっと上書きしちゃうと困る)。

ということで、引数A、Bを渡されたら、それがファイルとして存在するかどうかチェックする。
http://www.tohoho-web.com/lng/199911/99110136.htm

A、B両方が存在したら、どっちが入力でどっちが出力かわからないのでエラー。
Aが存在してBが存在しなかったら、Aを入力にして、Bを出力に。
Bが存在してAが存在しなかったら、Bを入力にして、Aを出力に。
A、B両方が存在しなかったらエラー。

これでいいような気がします。

でも、もう一歩考えると、引数は入力ファイル1個でいいんじゃないかな。
存在しなかったらエラー。
存在したらそれを入力にして、出力ファイル名は「out_入力ファイル名」とかで決め打ち。

でも、ここまでのぼくの回答はC言語じゃなくて仕様の問題だな~
    • good
    • 0
この回答へのお礼

なるほど、そういうやり方もあるんですね!
非常に参考になりました。
ご回答ありがとうございました。

お礼日時:2010/07/29 18:00

「順番が替わっても大丈夫なようにして」ということだから, きっと順番に意味があるんだろう. その「順番の意味」に従って区別すればいい.


「順番の意味」はあなたが秘密にしたいようだから, 自分の胸に聞いてください.
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/07/29 17:59

質問の意図が不明確。



>順番が替わっても大丈夫なように~~~
>どうしたら区別できますか。

というのはどういう事か?
正しい順番か?逆順か?という判断をするロジックは、既に存在するのか?それともそれを答えろと言うことか?

単にファイルを開くだけなら、順番は関係ない筈だが・・・・

何がどの様に困っているのかさっぱり理解できず。
何か補足してもらえないだろうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すみません、私の説明不足でした。。
コマンドライン引数の順番が入れ替わっても、ちゃんとそれぞれ判別できるようにしたいのです。

実行モジュール A(出力ファイル) B(入力ファイル)

AとBが入れ替わっても、Aは出力用のファイルで、Bは入力用のファイルと判別したいです。

[-o]のようなオプションを付ければ判別できると聞いたのですが、どうコードを書いていいのかわかりません。。

お礼日時:2010/07/29 16:12

えっと、引数を2個得て(それぞれA、Bとする)、ファイルAを開いて、ファイルBを開くのではダメですかね。


引数の個数はチェックせざるを得ないと思うんですけど。。

引数を渡す:
http://www.stackasterisk.jp/tech/program/c01_07. …

ファイルを読む:
http://www.stackasterisk.jp/tech/program/c01_08. …

たぶんこれが分からないんじゃないですよね?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

すみません、私の説明が足りませんでした。
コマンドライン引数の順番が入れ替わっても、ちゃんとそれぞれ判別できるようにしたいのです。

実行モジュール A(出力ファイル) B(入力ファイル)

AとBが入れ替わっても、Aは出力用のファイルで、Bは入力用のファイルと判別したいです。

お礼日時:2010/07/29 16:09

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