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