ページ 11

「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したいです。

Posted: 2017年2月27日(月) 01:26
by チアゴアルカンタラ
ubuntuのvirtual box を使用しています。
プログラムはこんな感じです。

コード:

#include <stdio.h>
#include <string.h>
#define MAXLEN 256
#define OUTFILE "out.txt"

int main(int argc, char *argv[]){
  FILE *fp, *fpout, *tmpout;
  char s[MAXLEN];
  // ここへ必要な変数宣言を適宜追加

  if (argc != 2){
    printf("Usage: %s <file>\n", argv[0]);
    return 1;
  }
  if ((fp = fopen(argv[1], "r")) == NULL){
    printf("Cannot open file: %s\n", argv[1]);
    return 1;
  }
  if ((fpout = fopen(OUTFILE, "w")) == NULL){
    printf("Cannot open file: %s\n", OUTFILE);
    return 1;
  }
  while (fgets(s, MAXLEN, fp) != NULL){
    if (strlen(s) == 1){ // 空行
      // ここへ必要な処理を適宜追加
    
      continue;
    }

    // ここへ必要な処理を適宜追加
    
      }
  fclose(fp);
  fclose(fpout);
}
コメントアウトされた指示の部分だけ書き加えてプログラムを完成させたいのですが、ファイルの入出力をこのプログラムにどう組んだらいいかわからず苦しんでいます。

Re: 「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したい

Posted: 2017年2月27日(月) 01:30
by みけCAT
  • ファイルを開く
  • ファイルを読み込む
  • ファイルを閉じる
という処理はすでにありますね。
入力の内容をそのまま出力したいなら、2つの「ここへ必要な処理を適宜追加」の場所両方にそれぞれ

コード:

fputs(s, fpout);
を入れればいいでしょう。

Re: 「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したい

Posted: 2017年2月27日(月) 01:44
by チアゴアルカンタラ
なるほど、fpではなくfpoutなんですね。ありがとうございます。
追記なんですが「tmpout」の内容は
(1,8) dist=8.062258
(2,6) dist=6.324555
(5,3) dist=5.830952
(4,2) dist=4.472136
(8,9) dist=12.041595

(4,2) dist=4.472136
(5,3) dist=5.830952
(2,6) dist=6.324555
(1,8) dist=8.062258
(8,9) dist=12.041595
となっているのですが、このとき「out.txt」には、
(4,2)
(5,3)
(2,6)
(1,8)
(8,9)
のみ表示したいのですがその方法ってわかりますか?

Re: 「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したい

Posted: 2017年2月27日(月) 01:55
by みけCAT
完全な仕様がわからないので確定できませんが、例えば
  • 空行があるまでは出力せず、あった後は出力する
  • 出力するときは、行の最初の空白までの部分のみを出力する
というようにすると、条件を満たせそうですね。

実装例
► スポイラーを表示

Re: 「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したい

Posted: 2017年2月27日(月) 02:03
by チアゴアルカンタラ
その処理は、if(strlen(s)==1){
}
の中に書くべきですかね?

Re: 「tmpout」という名前のファイルの内容を読み込み、「out.txt」という名前のファイルに内容を書き出したい

Posted: 2017年2月27日(月) 02:40
by チアゴアルカンタラ
本日は本当にお世話になりました。ありがとうございました。