PHPでCSVファイルのデータを取り込もうとしています。
全てのデータを表示させるのであれば、「while」などを使って書くのが一般的かと思うのですが、
最終行のデータ(「,」で区切られた最も左のフィールド)だけを取り出したいので、
以下のように書いてみました。
<?php
$file = fopen("hoge.csv","a+");
$nakami = fgetcsv ($file, 1000, ",");
echo $nakami[0];
fclose($file);
?>
「fopen」のmodeについて、「r」にすれば先頭から読み込まれ、
「a+」もしくは「ab+」ならばファイルの終わりにポインタが来る・・・
と色々なマニュアルに書かれていましたので、上記のようにしてみたのですが、
$nakami[0]で表示されるのは、1行目の最左列のデータになってしまいます。
1)このやり方(modeの設定)では最終行のデータ取得は不可能なのか
2)どのようなやり方なら最終行のデータ(のみ)は取得できるのか
お知恵をお借りできれば幸いです。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No1です。
No2の回答の方が確実です。「予め行数がわからないときに、最後の要素(最終行のデータ)というのはどのようにしたら取り出せるものなのでしょうか。」
$file = fopen("hoge.csv","r");
$contents = file($file);
とした場合、配列$contentsに各行が格納されるから
count($contents)で要素の数を調べて、最終行は
$contents[count($contents)] になる。よって
$nakami=expload(',',$contents[count($contents)]);
echo $nakami[0];
かな。
No.2
- 回答日時:
仮にファイルポインタが最後にきてしまったら結局
読むものはないでしょ?
(最後の行の最初の文字にシークするのではないんだから)
一行の文字数が固定であれば、fseekする手もありますが・・・。
普通にwhileでまわすので十分だと思いますけどね。
<?php
$fp = fopen("hoge.csv","r");
while( !feof($fp) ){
$nakami = fgetcsv($fp, 1000, ",");
}
fclose($fp);
echo $nakami[0];
?>
回答、ありがとうございます。
whileでやった場合、全データが取り込まれますが、
その中から、どうやって目的(最終行、最左列)のデータのみを
取り出せば良いのかが分からず手こずって質問させていただいた次第です。
No.1
- 回答日時:
$file = fopen("hoge.csv","a+");でポインタを
最後に移動させるのは、ファイルへの追記書き込み
を行うためにやるもので、逆順に読み込みするための
ものではありません。
最初に、file()関数でファイル全体を配列に格納し、
最後の要素を','を区切りとしてexpload()で分解して、
その最後の行の要素を得れば?
(ただし、これだと実際は全件読み込む事になりますが)
早速の回答、ありがとうございます。
やはりmodeは、私のような目的のためのモノではないんですね。
勉強になりました。
ところで、教えていただいた
「最後の要素を','を区切りとしてexpload()で分解して」
のところなのですが、exploadについてはおそらく「,」をデリミタにして
フィールド毎に分けていくということだと思うのですが、
予め行数がわからないときに、最後の要素(最終行のデータ)というのは
どのようにしたら取り出せるものなのでしょうか。
初歩的な質問で恐縮ですが、その点だけ補足いただけますと幸いです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
While文を使って配列の中身を全...
-
CSVデータの行数カウントをした...
-
多次元配列の一次元目の最大値...
-
ログファイルが一定行数を超え...
-
ヒアドキュメントの中のfor文
-
smartyのforeachの使い方
-
foreachのなかで次のキーを参照...
-
スカラーのベクトル微分
-
forとかで連番の変数を一気に格...
-
PHP 多次元配列変数のデータ受...
-
CSVデータのn番目だけの値を取...
-
$_SESSIONに二次元配列を使える...
-
3つの連想配列を交互に代入し...
-
多次元配列をソートする綺麗な...
-
プルダウンメニューにDBの内容...
-
unset使用時の利点
-
配列の書き方
-
String だと「 ByRef引数の型が...
-
multiple属性のPOSTを配列で受...
-
添え字が全て文字列のPHPの多次...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
CSVファイルの最終行のデー...
-
stdClass Objectを連想配列のよ...
-
複数行のデータのPOST処理に関して
-
ヒアドキュメントの中のfor文
-
Resource id #3 と表示されま...
-
エラーメッセージ(無効な間接...
-
自動で番号を振りたい
-
PHPでCSVの一部の行を編集したい
-
C言語でCSVファイルの行数を読...
-
バイナリファイルの内容を、そ...
-
CSVデータの行数カウントをした...
-
ログファイルの古い日付の行を...
-
While文を使って配列の中身を全...
-
csvの内容を行単位で削除したい
-
多次元配列の一次元目の最大値...
-
pythonのファイルの並びでの読...
-
配列同士の足し算のループ処理
-
【PHP】csvファイルへの書き出...
-
配列をファイルに書き込む方法
おすすめ情報