C言語関係掲示板

過去ログ

No.1193 一行の文字数制限&一ページの行数制限

[戻る] [ホームページ]
No.15583

一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/16 11:50:58)


txtファイルを読み込んで、そのファイルの文字数、行数を指定して揃えて出力するプログラムを作りたいです。自分で考えたのですが、fopenでループしてファイルを一行ずつ読み込み配列に保存するとこまではできました。
ここからどうすれば良いか誰か助けてください。


No.15585

Re:一行の文字数制限&一ページの行数制限
投稿者---nop(2004/07/16 12:28:37)


>txtファイルを読み込んで、そのファイルの文字数、行数を指定して揃えて出力するプログラムを作りたいです。自分で考えたのですが、fopenでループしてファイルを一行ずつ読み込み配列に保存するとこまではできました。
>ここからどうすれば良いか誰か助けてください。

一文字ずつ読み込み出力していき、
指定文字数分出力したら改行を出力し、文字数カウンタをクリアすればいいのでは?

# 改行読み込み時のカウンタクリアも忘れずに。


No.15590

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/16 14:43:06)


わかりました。やってみてできなければまた聞きにきます。ありがとうございました。


No.15694

一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/20 16:13:32)


一行の文字数制限できました。今度は一ページの行数制限何ですけど...
どなたかヒントを下さい。お願いします。


No.15698

Re:一行の文字数制限&一ページの行数制限
投稿者---REE(2004/07/20 17:22:47)


>一行の文字数制限できました。今度は一ページの行数制限何ですけど...
>どなたかヒントを下さい。お願いします。

一行の文字数制限の方法がヒントになっているはずです。
あなたには応用力はないのですか?


No.15703

Re:一行の文字数制限&一ページの行数制限
投稿者---ニタチ(2004/07/20 19:21:28)


一行出力する度に行数カウンタを+1して、指定行数まで出力したら終わり。


No.15776

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 12:18:05)


行数のカウントはできるんですが、ページに分けて出力するのができないです....


No.15778

Re:一行の文字数制限&一ページの行数制限
投稿者---シャノン(2004/07/22 12:42:58)


>行数のカウントはできるんですが、ページに分けて出力するのができないです....

プリンタに出力したいんですか?
で、行数が MAX になったら改ページしたいと?


No.15779

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 12:48:03)


>>行数のカウントはできるんですが、ページに分けて出力するのができないです....
>
>プリンタに出力したいんですか?
>で、行数が MAX になったら改ページしたいと?
行数を指定して行数MAXになったら次のページとわかるようにしたいんです。
出力はプリンタではないです。


No.15780

Re:一行の文字数制限&一ページの行数制限
投稿者---nop(2004/07/22 12:52:14)


>行数を指定して行数MAXになったら次のページとわかるようにしたいんです。
>出力はプリンタではないです。

では、「何に」「どの様に」出力をしたいのでしょうか?
OSや開発環境は何でしょうか?

必要な情報が提示されなければ、
お答えすることも出来ません。


No.15794

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 17:01:46)


出力のことはおいといて、count=0としてループで行数を求めました。
自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....


No.15796

Re:一行の文字数制限&一ページの行数制限
投稿者---nop(2004/07/22 17:18:49)


>出力のことはおいといて、count=0としてループで行数を求めました。
>自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....

改行文字がきた時、行数をカウントアップし、
カウントカップした時にif()文などで判定すればよいのでは?



No.15797

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 17:21:19)


>>出力のことはおいといて、count=0としてループで行数を求めました。
>>自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....
>
>改行文字がきた時、行数をカウントアップし、
>カウントカップした時にif()文などで判定すればよいのでは?
このようにやってみたら一行しか表示されないです。

if(count > column - 1){
rewind(fp);
fgets(line, SIZE, fp);
str[0] = strtok(line,",");
printf("\s",&str);
}else;
return 0;

}


No.15802

Re:一行の文字数制限&一ページの行数制限
投稿者---あかま(2004/07/22 18:04:53)


> printf("\s",&str);
とりあえずこれ"%s"の間違いかなと。(コピペ時に文字化けかも)

プログラムなんですが出来てるところも含めて全部貼り付けてみてはどうでしょうか?
それだけでなにかよいアドバイスがもらえるかもしれません。
strtokの使い方が怪しい気もしますし。この関数、使い方独特なので。


もしプログラムを貼り付けるときは「HTML変換ツール」を使ってください。


No.15805

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 18:10:21)


とりあえずここまでできました。一応一行だけ出力されます。
アドバイスお願いします。
#include<stdio.h>
#include<string.h>

#define SIZE 256

main()
{
  FILE *fp;
  char filename[SIZE];
  char line[SIZE], buffer[SIZE];
  char *str[SIZE];
  int count, column; 
  count = 0;

  printf("ファイル名を入力してください。 --> ");
  scanf("%s", filename);
  
  fp = fopen(filename,"r");
  if(fp == NULL){
    printf("ファイルが開けません。\n");
    return 1;
  }
  
  printf("一ページの行数を指定して下さい。-->");
  scanf("%d",&column);

 
  while(fgets(line,SIZE,fp) != NULL){
     count++;
   }

  for(;;){
    if(count > column - 1){
      rewind(fp);
      fgets(line, SIZE, fp);
      str[0] = strtok(line,",");
      printf("%s\n",str[0]);
    }else;
    return 0;
  }
}




No.15806

Re:一行の文字数制限&一ページの行数制限
投稿者---nop(2004/07/22 18:18:26)


>とりあえずここまでできました。一応一行だけ出力されます。
>アドバイスお願いします。

No.15694での
>一行の文字数制限できました。

と言う発言は嘘ですか?
これでは、一行の文字数制限もなされないのでは?

「一行の文字数制限」が出来たソースが別にあるのでしたら、
そのソースに追加していけば、
「一行の文字数制限&一ページの行数制限」が出来るのではないのですか?



No.15807

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 18:26:23)


一行の文字数制限です。行になるとよくわからないんですが....
#include<stdio.h>

#define LINE_SIZE 60

main()
{
  FILE *fp;
  char filename[21], str[LINE_SIZE+1],ch;
  int column, count, i;
   
  printf("ファイル名を入力してください。-->");
  scanf("%s",filename);
  fp = fopen(filename,"r");
  if(fp==NULL){
    printf("%sファイルを開けません。\n",filename);
    return 1;
  }
  printf("一行の文字数を指定してください。-->");
  scanf("%d",&column);
  
  count = 0;
  for(;;){
    for(i=0;;i++){
      ch = fgetc(fp);
      if(ch==' '||ch=='\n'||ch=='\t'||ch==EOF)
    break;
      
      if(i==column){
    printf("%d文字以上で構成された単語があります。",column+1);
    return 1;
      }
      if(i==LINE_SIZE){
    printf("%d文字以上で構成された単語があります。",LINE_SIZE+1);
    return 1;
      }
      
      str[i] = ch;
    }
    
    if(i!=0){
      str[i] = '\0';
      count += i;
      
      if(count<=column){
    printf(str);
    
    if(count==column){
      printf("\n");
      count = 0;
    }else{
      printf(" ");
      count += 1;
    }
      }else{
    printf("\n%s",str);
    count = i+1;
      }
    }
    
    
    if(ch==EOF)
      break;
  }
  printf("\n");
}




No.15814

Re:一行の文字数制限&一ページの行数制限
投稿者---あかま(2004/07/22 20:27:41)


基本的には改行処理の中に、改ページのためのカウントを入れるだけ。

#include<stdio.h>

#define LINE_SIZE 60
#define PAGE_SIZE 3

main()
{
  FILE *fp;
  char filename[21], str[LINE_SIZE+1],ch;
  int column, count,pcount, i;
   
  printf("ファイル名を入力してください。-->");
  scanf("%s",filename);
  fp = fopen(filename,"r");
  if(fp==NULL){
    printf("%sファイルを開けません。\n",filename);
    return 1;
  }
  printf("一行の文字数を指定してください。-->");
  scanf("%d",&column);
  
  count = 0;
  pcount = 0;
  for(;;){
    for(i=0;;i++){
      ch = fgetc(fp);
      if(ch==' '||ch=='\n'||ch=='\t'||ch==EOF)
        break;
      
      if(i==column){
        printf("%d文字以上で構成された単語があります。",column+1);
        return 1;
      }
      if(i==LINE_SIZE){
        printf("%d文字以上で構成された単語があります。",LINE_SIZE+1);
        return 1;
      }
      
      str[i] = ch;
    }
    
    if(i!=0){
      str[i] = '\0';
      
      if(count+i > column){//一行がcolumnを超えそうなら改行

        printf("\n");
        count=0;
        pcount++;//行数のカウント

        if(pcount >= PAGE_SIZE){//行数がページサイズになったら改ページ

          printf("-----改ページ------\n");
          pcount = 0;
        }
      }
      
      printf("%s ",str);
      count += i;
    }
    if(ch==EOF)
      break;
  }
  printf("\n");
  return 0;
}

***入力***
一行の文字数制限 10

***入力テキスト***

aaa bbbbb
cc dddddddd
eeeeee g  hhhhh
iiii
jjjjjjjjj
k
lllll
mmmmmmm

***出力***

aaa bbbbb cc 
dddddddd 
eeeeee g 
-----改ページ------
hhhhh iiii 
jjjjjjjjj k 
lllll 
-----改ページ------
mmmmmmm 



No.15825

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/23 10:19:13)


ありがとうございました。複雑に考えすぎてたかなって思います。


No.15790

Re:一行の文字数制限&一ページの行数制限
投稿者---他力本願(2004/07/22 14:59:29)


>>>行数のカウントはできるんですが、ページに分けて出力するのができないです....
>>
>>プリンタに出力したいんですか?
>>で、行数が MAX になったら改ページしたいと?
>行数を指定して行数MAXになったら次のページとわかるようにしたいんです。
>出力はプリンタではないです。
質問の意味がよくわからないです。
1.出力先はどこですか?
2.次のページとわからせるために、どのように出力したいのですか?
出力例みたいなものを載せれば、
他の方も答えようがあるかもしれません。



No.15795

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 17:15:24)


出力のことはおいといて、count=0としてループで行数を求めました。
自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....。


No.15798

Re:一行の文字数制限&一ページの行数制限
投稿者---REE(2004/07/22 17:24:15)


>出力のことはおいといて、count=0としてループで行数を求めました。
>自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....。

当然です。
出力方法が未定なのに処理内容が決まる訳がありません。



No.15799

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 17:32:30)


>>出力のことはおいといて、count=0としてループで行数を求めました。
>>自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....。
>
>当然です。
>出力方法が未定なのに処理内容が決まる訳がありません。
とりあえず行数より多かったら改行としてやります。


No.15800

Re:一行の文字数制限&一ページの行数制限
投稿者---REE(2004/07/22 17:41:01)


>>>出力のことはおいといて、count=0としてループで行数を求めました。
>>>自分で定めた行数より多かった時、処理をする。というところで、戸惑ってるんですけど....。
>>
>>当然です。
>>出力方法が未定なのに処理内容が決まる訳がありません。
>とりあえず行数より多かったら改行としてやります。

出力ファイルでは改行を改ページとするわけですね。

ところで、入力ファイルにはページの境界がありますか?
ある場合は、何をもってページの境界と判定しますか?


No.15801

Re:一行の文字数制限&一ページの行数制限
投稿者---903(クエン酸)(2004/07/22 17:46:27)


>出力ファイルでは改行を改ページとするわけですね。
>
>ところで、入力ファイルにはページの境界がありますか?
>ある場合は、何をもってページの境界と判定しますか?
入力ファイルはただの英文で境界はありません。行数を定めてテキストの行数がそれ以上の場合次のページという具合です。