質問: ファイルから値を読み込んで 指定した行先にポインタを移動させたいのですが、どのようにすればいいのでしょうか? fseek関数を使用して、行先にポインタを移動させようとしたのですが、一行ごとに文字量が違っていて任意の場所に移動できませんでした。 このような値をファイルから読み取って、最後の行だけ配列に格納したいのですが、どのようにすればいいのでしょか? 指定した行先のファイルポインタなどを入手するやり方などがあったら、教えてもらえたら幸いです。<(_ _)> ..................................................................... 0.982465,-0.186447,0.000000,0.000000, 0.186447,0.982465,0.000000,0.000000, 0.000000,0.000000,1.000000,0.000000, 0.210073,-0.133671,0.001700,1.000000;;, ..................................................................... ``` コード ```
回答: `fseek`や`ftell`の扱う file position indicator は、バイト単位です。 (OS的にはファイルというのは行の集まりじゃなくてバイトの集まりです) バイト位置が不明な場所まで読み飛ばすというのは不可能です。 行の区切りを知るためには先頭からそこまで読む必要があります。 > > 最後の行だけ配列に格納したいのですが、 > > > `fgets`を同じ文字配列に読み込むというのをEOFまで繰り返せば、それが最終行です。 ``` while(fgets(line,sizeof line,stdin)); ``` あるいは、最終行であれば、ファイル末尾から1バイトずつ遡って読んで、2つ目の改行が出てきたら、その1つ後ろのバイト以降が最終行です。 ``` for(i=2; ; i++){ if(fseek(fp,-i,SEEK_END)<0) エラー処理; if((ch=getc(fp))=='\n') break; } fgets(line, sizeof line,fp); ```