ファイルTYPEコマンドの作り方2
C言語ケーススタディ

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。
C言語でゲームプログラマーを目指す方へ
 ■C言語ゲームプログラミング講座
 C言語でのゲームプログラミングを解説する講座
 始めました。

前回作成したTYPEコマンドは、行番号の桁が増えると桁がずれてしまいます。 これはprintf関数の%d指定を%5dのように変更すれば、桁を揃えて印字することができます(行番号が6桁以上になればまたずれてしまいます)。


#include <stdio.h>

main(int argc, char *argv[])
{
	FILE	*fp;
	char	buff[1000];
	int	lno;

	if(argc != 2){
		printf("コマンドの入力形式が間違っています.\n");
		return;
	}
	fp = fopen(argv[1], "rb");
	if(fp == NULL){
		printf("ファイルがオープンできません[%s].\n", argv[1]);        
		return;
	}
	for(lno = 1; ; lno++){
		if(fgets(buff, sizeof(buff)-1, fp) == NULL)
			break;
		printf("%5d: %s", lno, buff);
	}
	fclose(fp);
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run file」のように実行する必要があるので実行ボタンはありません

上記のプログラムでは、行番号が一定幅(5文字分)で印字されます。 ただし、表示しているファイルにタブ(Tab)文字が使われていると桁が正しく表示されなくなってしまいます。 これはタブ文字が8文字ごとに桁を揃えて表示するため行頭のタブ文字がずれて表示されてしまうためです。 本来ならタブ文字を空白文字に変換する処理が必要なのですが、行頭の行番号と': 'を合計して8桁になるようにしておけば一応正しく表示されるようになります。


#include <stdio.h>

main(int argc, char *argv[])
{
	FILE	*fp;
	char	buff[1000];
	int	lno;

	if(argc != 2){
		printf("コマンドの入力形式が間違っています.\n");
		return;
	}
	fp = fopen(argv[1], "rb");
	if(fp == NULL){
		printf("ファイルがオープンできません[%s].\n", argv[1]);        
		return;
	}
	for(lno = 1; ; lno++){
		if(fgets(buff, sizeof(buff)-1, fp) == NULL)
			break;
		printf("%6d: %s", lno, buff);
	}
	fclose(fp);
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run file」のように実行する必要があるので実行ボタンはありません

今回は、このプログラムで一応完成としますが、上記のタブの問題以外にも一行が999文字以上のファイルでは正しく表示されないという問題もあります。

お問い合わせ先 C言語のトップページに戻る Copyright(C) 2003 潟Iーキッド