画像(logo)

HOME/[簡易ソフト開発]ソースHTML置換 目次/三日目 c言語による起動部分の作成

広告

[簡易ソフト開発 ソースHTML置換]
三日目 c言語による起動部分の作成

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

c言語による起動部分の作成

では今回は起動部分を作っていきます。

置換したいファイルをドラッグ&ドロップすれば起動するようにするのと、簡単なエラー対策も加えます。

ドラッグ&ドロップによる起動

ドラッグ&ドロップによる起動自体はc言語だったら普通にコンパイルして生成される実行ファイル「.exe」ファイルの上にドラッグ&ドロップすれば自動的にプログラムは起動します。

そして「main()」関数の引数にその情報が格納される事になります。

まずは次のプログラムを普通に実行してみてください。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(int argc, char *argv[]){
	int ch;

	printf("argc = %d\n\n",argc);
	printf("argv[0] = %s\n",argv[0]);

	ch = getchar();

	return 0;
}

■実行結果■

画像(ssch_3_1)

「main()」関数の引数に注目です。

int main(int argc, char *argv[])

「int argc」というのが受け取った情報の数で「char *argv[]」というのが受けとった内容になります。

「argv[0]」には必ずこの実行ファイルの場所を示すパスが入り、「argv[1]」以降にその他の内容が格納されていきます。

それではプログラムの内容を少し変えて

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(int argc, char *argv[]){
	int ch;

	printf("argc = %d\n\n",argc);
	printf("argv[0] = %s\n",argv[0]);
	printf("argv[1] = %s\n",argv[1]);

	ch = getchar();

	return 0;
}

できた実行ファイルの上に何かファイルをドラッグ&ドロップしてファイル名を確認してみましょう。

画像(ssch_3_2)

ファイル名を確認することができました!

javaクラスの実行

それではファイル名が取得できたトコロで前回作ったクラスにそのファイル名を渡して実行させます。

char str[1024] = "java -classpath ./class CodeToHTML ";
strcat(str, argv[1]);
system(str);

実行したいクラスが同じフォルダ内にない場合は「-classpath」コマンドでパスを指定して実行します。

さきほど取得したファイル名も文字列を結合する「strcat()」関数を使ってくっつけて「system」コマンドを使ってコマンドライン上から実行します。

エラー対策

後は簡単なエラー対策を加えてみます。

単体での実行に対するエラー対策

例えばこのような状態で

画像(ssch_3_3)

実行ファイルを直接ダブルクリックされても大丈夫なようにエラー対策を加えます。

if (argc == 2){
	/*置換処理に入る*/
}
else{
	/*エラーメッセージなどを表示*/
}

ここは簡単にmain関数の引数の数で判断する事にしました。

もしダブルクリックで直接実行された時は「argc」は「1」になります。

ドラッグ&ドロップで実行された時はファイル名も加わるので「argc」は「2」になります。

という事で「argc」が「2」の時に処理にはいるようにしました。

テキストファイルのみ受け付ける

今回のプログラムはファイルの中身を全てテキスト変換して表示するのでもしここに画像ファイルや動画ファイルなどを落としたらきっと大変な事になります。(恐いので試してないですがもしかしたら「FileReader」クラスなんかがうまい事対応してくれるかも・・・。)

なので念のためテキストファイルのみを受け付けるようにします。

file_name_length = strlen(argv[1]);
for (i = 0; i < 5; i++){
	extension[i] = *(argv[1] + (file_name_length + (i - 4)));
}
if(strcmp(extension, extension2) == 0){
	strcat(str, argv[1]);
	system(str);
}
else{
	printf("error");
	ch = getchar();
}		

取得したファイル名のお尻の部分、つまり拡張子の部分だけを抜き取り「strcmp()」関数を使ってそれが「.txt」ファイルだったら実行するようにします。

これで簡単なエラー対策は完了です。

画像(ssch_3_4)

置換完了!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)