• ベストアンサー

教えてください。

問題9 指定されたテキストファイルの先頭のn行を表示せよ。ファイル名と表示行数nは コマンドライン引数として与える。作成したコマンド(プログラム名)をheadとすると、 入力の書式は以下のようになる。 head [-n] ファイル名 表示行数nの指定は省略可能とし、省略時はn=10とする。また、ファイルの内容が n行に満たないときは、すべての行を表示する。 どのようにプログラムをつくればあまりわかりません。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>(3)がわかりません。ファイルを開くことはバイナリ-ファイルなどで勉強したのでわかります。 fgetsで1行ずつファイルから読んでくればいいかと。 例えば、int i,n=10; char buf[256]; FILE *fp; としておいて、指定行数をnに入れてから、 for (i=0; i<n; i++) { if( fgets(buf,sizeof(buf),fp) == NULL) break; printf("%s",buf); }

その他の回答 (2)

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

回答ではありません。 問題9? どのようにプログラムを作ればあまりわからない? 何らかの宿題なのでしょうか。いずれにしろ自分で調べて回答を導き出さない限り習得したとはいえません。 少なくとも自分で考えた部分を出さないと、 「こいつ、質問を丸投げしてやがる。習得する気がないんだな?」 と、ものすご~く嫌な印象を受けます。逆の立場に立ってみましょう。あなたが先生で生徒に宿題を出すときは自分で解いてもらいたいでしょう?(いいよ別に、という人は論外)他の人がやったんでは教える意味がありません。 第一、ネットで検索すりゃいろんなサンプルが転がってんですよ。それを面倒くさがっているとしか思えません。 一応「猫でも分かる…」のページを参考にあげときます。

参考URL:
http://kumei.ne.jp/c_lang/
tadashi1111
質問者

補足

ついめんどくさくなり頼ってみました・・・。

回答No.1

どのへんが分かりませんか? (1)コマンドラインからファイル名と(あれば)行数を取得する (2)ファイルを開く (3)指定行数分表示する

tadashi1111
質問者

補足

(3)がわかりません。ファイルを開くことはバイナリ-ファイルなどで勉強したのでわかります。

関連するQ&A

  • sedを使って複数ファイルの先頭行を表示

    以下の様なファイルがあります。 各ファイルの先頭行をとりだしたいのですが、headコマンドを使うと ファイル名と結果が分かれて表示されます。 sedで、-nオプションの行番号指定で表示することができるので、 sed -n '1p' *.txt のワイルドカード指定でやったのですが、 この場合だと複数ファイルとみてくれなくて、すべてのファイルを ひとつにしてその先頭を表示しているみたいです。 できれば、各ファイル毎に、ファイル名と結果を1行にして表示したい のですが、どうすればよいでしょうか。 参照ファイル cat 1.txt 12345 67890 cat 2.txt abcde fghij cat 3.txt 11111 22222 headコマンドで実行 $ head -n 1 *.txt ==> 1.txt <== 12345 ==> 2.txt <== abcde ==> 3.txt <== 11111 sedで実行 $ sed -n '1p' *.txt 12345

  • AIXでファイル参照時、特定行のみ出力する方法

    AIX環境にてファイルの中身を参照する際のコマンドとしては cat(全表示)、head(頭から○行)、tail(下から○行)、などを使用すると思いますが、 例えば『ファイルの20行目~30行目』を表示させるようなコマンドはありますでしょうか。 現時点では該当のコマンドが見つからず、上記の例を実現する場合は head -30 <ファイル名> | tail -10 (先頭30行を読み込み、その中の下10行を読み込む) などで代替しているのですが、パイプを使わず一つのコマンドで実現できれば、だいぶ楽になります。 良い方法をご存知の方がいらっしゃいましたら、ご教示頂けると幸いです。 よろしくお願い致します。

  • osxにheadコマンドを再インストール

    macのosxで、Linuxのheadコマンドを使いたいですが、なぜかLWP-PERLのheadコマンドで上書きされてしまっています。 「標準入力の先頭行を表示するheadコマンド」を再インストールするにはどうすればいいですか? (ちなみにman headでは本来の先頭行表示コマンドの説明が出てきますので、昔は入っていたんだと思います。)

  • プログラム内でのワイルドカードファイル名展開

    javaプログラムのコマンドライン引数にパスの無いファイル名を指定し、プログラムの中でパス付きファイル名としています。 コマンドラインにワイルドカードの入ったファイル名が指定された場合、プログラムの中でファイル名展開する必要がありますが、そのようなコード、あるいはライブラリをお教え頂けませんでしょうか。 2011 Dec. 29.

    • ベストアンサー
    • Java
  • 2^0, 2^(-1), 2^(-2), ..., 2^(-n)

    指令行の引数に正の整数 n を指定すると, 2^0, 2^(-1), 2^(-2), ..., 2^(-n) を順に各行に出力していくプログラムで、 n が大きな値になっても,小数点以下100桁までほ正確に結果を出力するようにしたいのですが、どうしたらよいでしょか?

    • ベストアンサー
    • Java
  • ファイルの内容の表示

    実行時のコマンドライン引数で指定したファイルの内容を、行番号付きで画面に表示するプログラムを作る という問題です。ヒントも与えられています。 行番号付きの表示、コマンドライン引数の利用。両者を組み合わせればできるはずだ >  main関数の引数にargcとargvを指定して、コマンドライン引数をファイル名として利用する。キーボード入力を促す文(プロンプト)や改行チェックは不要なので書かないこと >  コマンドライン引数が指定されない場合は、メッセージを表示してプログラムを終了 >  ファイルの内容を画面表示する処理は、ユーザー定義関数put_file_contentsに記述する。仮引数には文字型のポインタ変数をひとつ指定し、ファイル名を受け渡せるようにする。put_file_contents自体の型は整数型(int)で、正常終了なら返り値0を返すこと。 行番号付きのプログラム#include<stdio.h> > int put_file(char *filename); > > int main() > { > char line[50]; > char *ptr; > > printf("ファイル名を入力:"); > fgets(line,sizeof(line),stdin); > ptr = line + strlen(line) - 1; > if(*ptr == '\n') { > *ptr = '\0'; > } > > put_file(line); > > return 0; > } > > int put_file(char *filename) > { > FILE *fp; > char buf[100]; > int line_no; > > fp = fopen(filename,"r"); > if (fp == NULL){ > printf("%sを開けません\n",filename); > return 1; > } > line_no = 1; > while (fgets(buf,sizeof(buf),fp) != NULL){ > printf("%3d: ",line_no); > printf("%s",buf); > line_no++; > } > fclose(fp); > > return 0; > } で、コマンドライン引数のプログラムは#include<stdio.h> void write_key_inputs(char *filiname); int main(int argc, char *argv[1]) { write_key_inputs(argv[1]); return 0; } void write_key_inputs(char *filename) { FILE *fp; char buf[100] ; fp = fopen(filename,"w"); while(fgets(buf, sizeof(buf),stdin) != NULL) { fputs(buf, fp); } fclose(fp); return ; } です。これらを組み合わせて少しいじると出来るみたいなのですが、できていません。ちなみに私が考えたプログラムは #include<stdio.h> int put_file_contents(char *filename); int main(int argc,char *argv[]) { int i; if(argc == 1){ printf("コマンドライン引数がありません\n"); return 1; } for(i = 0;i<argc;i++) printf("argv[%d]は「%s」です\n",i,argv[i]); put_file(i); return 0; } int put_file(char *filename) { FILE *fp; char buf[100]; int line_no; fp = fopen(filename,"r"); line_no = 1; while (fgets(buf,sizeof(buf),fp) != NULL){ printf("%3d: ",line_no); printf("%s",buf); line_no++; } fclose(fp); return 0; } です。コマンドライン引数は表示されるのですが、行番号が表示されません。どうしたらいいでしょうか??

  • Perlのプログラミングについて

    Perlのプログラミングでつまづきました。 # ファイルから指定文字列を含む行を収集する # 入力ファイルのオープンと読み込み print( "入力ファイル名?" ); $n = <STDIN>; chomp( $n ); open( FIN, "<$n" ) or die "入力ファイルオープンエラー: $!\n"; $n = @a = <FIN>; close( FIN ); print( "$n 行読み込みました\n" ); # 行の収集 print( "検索文字列?" ); $x = <STDIN>; chomp( $x ); $ptn = $x; #指定の文字列 $x = @b = grep( /$ptn/, @a ); print( "$x 行見つかりました\n" ); # 出力ファイルのオープンと書き出し print( "出力ファイル名?" ); $y = <STDIN>; chomp( $y ); open( FOUT, ">$y" ) or die "出力ファイルオープンエラー: $!\n"; print FOUT ( $ptn, "\n" ); print FOUT ( $x, "\n" ); print FOUT ( @b ); close( FOUT ); というプログラムで実行すると C:\My Perl\pl>perl プログラムの実行.pl 入力ファイル名?sample1.txt 168 行読み込みました 検索文字列?k 45 行見つかりました 出力ファイル名?out3-24.txt 続行するには何かキーを押してください . . . となり出力ファイルの中身が表示されません。 どこを間違えているのかご指摘いただけないでしょうか?

  • VS 2005インストール後、コマンドプロンプトからコンパイルをしたい

    友人に誘われてプログラミングを始めました。 VS 2005をインストールしたのですが、 cppファイルをコマンドプロンプトからコンパイルすることはできるでしょうか。 コマンドラインでファイル名などを指定するプログラムを書く際、 VSでプログラムを書く →VS上でビルド(コマンドラインからの引数がないのでエラーが出る) →コマンドプロンプトでプログラムを実行 としているので、ちょっと不便しています。

  • x^2+y^2<n^2

    指令行の引数に正の整数 n を指定すると,x^2+y^2<n^2となる整数格子点 (x, y)(x>0, y>0)の個数を計算して出力するプログラムで、 n が1億であっても,きちんと個数が計算できるようにしたいのですが、どうしたらよいでしょうか?

    • ベストアンサー
    • Java
  • ファイルの読み込み時について

    こんにちは。質問させてください。 あるファイルを読み込みその読み込んだ行に指定した文字列がふくまれていたら 別ファイルに書き込む処理を作成しています。 ------------------------------------- $count=0; $fd = fopen($file, "r"); //$file ベースとなるファイル if($fd){ while(!feof($fd)){ echo($count."\n"); <省略> if(指定した文字列発見){ 別ファイルに書き込む }   <省略> $count = $count + 1; } fclose($fd); } ------------------------------------- 念のため参照元ファイルの行を表示($countにて)させています。 ここで質問なんですが、 上記プログラムを実行すると$countが1703行までしか表示されません。 元データは10000行あります。 上記で10000行まで$countを表示できるはずなのですが・・・ 助けてください・・・ よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう