テキストファイルの読み込みとファイルポインタについて質問です。
最近PHPを勉強し始めました。
fgets()とfseek()についてわからないことがあるので教えて頂けないでしょうか。
現状以下のテキストとPHPファイルを用意しています。
PHPに2行目のbを表示させたいのですが、思ったように表示をさせることができません。
fgets()は"現在のファイルポインタから次の1行を取得"
fseek()は"ファイルポインタを指定したバイト数分移動する"と調べてわかりました。
この二つを使って2行目を指定してbを表示したいのですがうまく表示されて困っています。
test.phpのコメントの★の部分がわからない箇所になります。
おそらく根本的な考え方が間違っていると思うのですが…いろいろ調べたのですがわかりませんでした。
申し訳ありませんがご教授願えないでしょうか。
-----------------
new.txt
-----------------
a
b
c
d
e
-----------------
-----------------
test.php
-----------------
<?PHP
$new_file = 'new.txt';
$fpt = fopen($new_file,'r');
// ファイルオープン直後のポインタ位置
echo '現在の位置=行指定'.ftell($fpt).'<br>';
print fgets($fpt).'<br>';
// ポインタを5進める
fseek($fpt,5);
echo '現在の位置=行指定'.ftell($fpt).'<br>';// ポインタの位置確認
print fgets($fpt).'<br>';// ★ここでeを表示したい
// 現在の位置からポインタを3戻す
fseek($fpt,-3,SEEK_CUR);
echo '現在の位置=行指定'.ftell($fpt).'<br>';// ★行指定が5-3なので2に…ならないです。
print fgets($fpt).'<br>';
// ポインタを先頭へ
rewind($fpt);
echo '現在の位置=行指定'.ftell($fpt).'<br>';// ポイントが先頭にきたか確認
print fgets($fpt).'<br>';
// ポインタを最後へ
fseek($fpt,0,SEEK_END);
echo '現在の位置=行指定'.ftell($fpt).'<br>'; // ★new.txtはabcdeの5行なので5になると思いきや18に…
print fgets($fpt).'<br>';
fclose($fpt);// ファイルを閉じる
?>
-----------------
-----------------
実行結果
-----------------
現在の位置=行指定0
a
現在の位置=行指定5
現在の位置=行指定3
b
現在の位置=行指定0
a
現在の位置=行指定18
No.1
- 回答日時:
単に改行コード分を計算に入れてないだけでは。
ftellやfseekは行を意識しませんし。
バイナリエディタでそのファイルを見てみると分かりやすいかも。
返事が遅くなってしまい申し訳ありませんでした。
なるほど、行を認識してくれなかったのですね一つ勉強になりました。
fseekは"バイト数移動"というようなことも書かれていたので気になっていたのですが、そういうことだったのですね。
調べた所フリーのバイナリエディタがいくつか見つかりましたので帰宅したら早速試してみます。ありがとうございました。
No.2ベストアンサー
- 回答日時:
RIN_LINさん、
以下でいかがでしょうか?
<?php
$lineArray=array();//読み込んだ行を入れ込む、配列生成
$n=0;//行数のカウンター
$file=fopen('new.txt','r');//読み込み対象ファイル名を、new.txtとする
flock($file,LOCK_SH);
while (!feof($file)){//行末まで、1行単位で、読み込む
$line=fgets($file);
$n++;//行数をカウント
array_push($lineArray,$line);//配列$lineArrayに、push
}
print $lineArray[1];//0,1,2・・・の1番目を表示する
flock($file,LOCK_UN);
fclose($file);
お返事いただきましてありがとうございます。只今仕事中です。
ソース確認させて頂きました、なんだかうまくいけそうな気がします。
帰宅しましたら早速試させて頂きます。
結果が出ましたらまた連絡させて頂きます。
取り急ぎお礼をさせて頂きました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Windows 10 Windowsのバッチファイルで正規表現の置換方法について… 4 2022/12/09 16:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLのロードに失敗する
-
TSVファイルをCSV形式に変換したい
-
onedrive にexcelファイルをア...
-
Fedoraでphp
-
【file_exists】ファイルが存在...
-
ImageCreate関数が undefined f...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
インスタンス化に伴うメモリ消...
-
error_reporting(0);にも関わら...
-
MySQLのdatetime型の月日0を削...
-
httpdのプロセスが自動で消えな...
-
<A href ~ と一緒に値を渡すには
-
wgetの使い方
-
CygwinでNo such file
-
SSI される .inc ファイル内に ...
-
ワードプレスサイト PHP8.0.25...
-
.phpと.incファイルの違いはな...
-
phpにて動的なページを生成する...
-
Matlab 指定したディレクトリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでFilename cannot be empty...
-
2つの画像ファイルが異なるファ...
-
phpのftp_get()でエラーが出ます。
-
ファイルの行数取得
-
stat failed
-
ファイル名は、数字の「0」(...
-
XMLのロードに失敗する
-
日本語が文字化けしないよう読...
-
shift-jisでfgetcsv
-
Smartyで吐き出されたhtmlソー...
-
PHPでテキストファイルかどうか...
-
PHPでの別のサーバーのテキスト...
-
別のサーバにあるファイルの存...
-
値の取り出し方について教えて...
-
PHPでAPI 出力はCSVを取得する...
-
FirefoxでFormのfileでファイル...
-
PHPのファイル操作
-
Warning: preg_match_allの他に...
-
日本語のファイルが開けない
-
TSVファイルをCSV形式に変換したい
おすすめ情報