商品レビューゲーム食レポお問い合わせホームプログラミングPHPPHPのSplFileObjectでファイル読み込み!(テキスト・CSV)PHPTwitterFacebookはてブPocketLINEコピー2022.12.05PHPでSplFileObjectを使って、ファイルを読み込む方法について書いています。最初にSplFileObjectクラスについて簡単に解説しています。その後にテキストファイルとCSVファイルを読み込んで、挙動を確認してみました。載せているサンプルコードについては、PHPのバージョン8.1.8を使って検証しています。Libraryの略称です。SplFileObject以外にもPHPで使えるライブラリがいろいろあります。Libraryの他のライブラリについては、公式ドキュメントのこちらに書いています。SplFileObjectはファイル操作のためのクラスです。SplFileObjectを使うことで、簡単にファイルを読み込めます。PHPで最初から使えるライブラリなので、Laravelのコントローラーなどでも使うことが可能です。CSVファイルを読むための設定もあるので、CSVファイルについても簡単に読み込むことができます。テキストファイルを読み込むSplFileObjectを使って、テキストファイルを読み込んでみます。ファイルを読み込むプログラムを下記のように作成しました。最初にSplFileObjectクラスをnewして、ファイルを読み込んでいます。SplFileObjectのコンストラクタに引数で渡しているのはファイルのパスになります。(“hello.txt”)これだけで、ファイルの読み込みが完了して、$file変数に読み込んだファイルの情報が入ります。foreach文でループすることで、ファイルの内容を1行ずつ取り出して、処理することが可能です。今回は$file変数をforeach文に指定しています。$number変数が0からの行番号、$text変数がファイルの内容になります。echoで行番号とテキストの内容を出力するようにしました。今回は、下記のファイルを読み込んで出力してみます。World!先ほどのプログラムを実行します。すると、下記のように行番号とファイルの内容が表示されました。World!ファイルの行数を取得したいファイルが行数を取得したい場合には、下記のように最終行の位置まで移動して、keyメソッドを呼びます。3$file変数にSplFileObjectのインスタンスを作成して、格納しています。次の処理で、インスタンスからseekメソッドを呼んで、引数で指定した個所にファイルポインタを移動させています。引数で指定しているのはPHP_INT_MAXです。これはPHPがサポートしている整数型の最大値になります。これで、ファイルの最終行に移動して、keyメソッドを呼ぶことで行番号を取得しています。行番号は0からなので、+1することで最終行の行番号になります。今回はファイルの行数が3行なので、「3」が返ってきました。ファイル名を取得したいファイル名を取得したい時には、getFilenameメソッドを呼びます。hello.txt最初に絶対パスで指定して、SplFileObjectのインスタンスを$fileに格納しています。次の行でgetFilenameメソッドを呼んでいます。これで、ファイルの名前を取得することができます。拡張子と名前を分けたい場合には、下記のようにexplode関数を使うと良いです。txtCSVファイルを読み込むSplFileObjectを使って、CSVファイルを読み込んでみます。setFlagsメソッドで、CSVファイルを読む設定をすることで、読み込みが簡単にできます。setFlagsメソッドについては、公式ドキュメントのこのあたりに書いています。"{$fruit}は{$color}で{$price}円です\n";}先ほどと同様に、SplFileObjectクラスをnewして、ファイルを読み込んでいます。SplFileObjectには、読み込むファイルのパスを渡しています。(“test.txt”)その次の行で、setFlagsメソッドを利用して、CSVを読み込む設定を行なっています。定数のSplFileObject::READ_CSVを渡すことで、CSV読み込みの設定が完了します。これでCSVファイルを読み込み時に、カンマやダブルクォーテーションなどを解析して、配列で読み込んでくれます。foreach文で$file変数を元にループしています。$row変数に、CSVファイルの1行のそれぞれの値が配列で格納されます。list関数を使って、$row変数の0番目〜2番目の値を受け取っています。CSVカラムの0番目が$fruit、1番目が$color、2番目が$price変数に設定されます。今回は下記のようにCSVを用意しました。"170"実行すると、このように配列として値が受け取れて、表示されることが確認できました。りんごは赤で100円ですぶどうは青で150円ですバナナは黄で170円ですダブルクォーテーションで囲まれてないときには?ダブルクォーテーションでCSVの値が囲まれていない場合でも読み込み可能です。カンマの後に空白があると、値の空白として処理されるので注意が必要です。下記のようなCSVの場合です。黄,170先ほどのプログラムで出力すると、このようになります。黄で170円ですCSVカラムの2番目の先頭に空白があるので、空白も値としてみなされてしまいました。このような場合はtrim関数を使うと良いかもしれません。rtrim)タブ区切りCSV(TSV)の場合はどうなる?タブ区切りのTSVと呼ばれる形式の場合には、setCsvControlメソッドを使うと良いです。setCsvControlメソッドでは、CSVの区切り文字や囲み文字、エスケープ文字が指定できます。詳細は公式のこちらに記載があります。下記のように先ほどのプログラムを修正します。---上記では、setFlagsメソッドでCSVを指定した後に、setCsvControlメソッドでタブ文字(“\t”)を指定しています。することで、タブ区切りのTSVファイルに対応することが可能です。"170"先ほどと同じように、下記の出力になります。りんごは赤で100円ですぶどうは青で150円ですバナナは黄で170円です空行を読み飛ばすsetFlagsメソッドに定数を設定することで、CSVに空行があったときに読み飛ばすことが可能です。下記のように空行があるCSVファイルの場合です。"170"SplFileObject::READ_CSVのみを設定した下記のようなプログラムだとします。var_dump($row);}var_dump関数で、読み込んだカラム情報を出力しています。すると、このように、空白行も1行として読み込まれてしまいます。NULL}setFlagsメソッドに定数を追加することで、空白行をスキップして処理することが可能です。SplFileObject::SKIP_EMPTY・SplFileObject::DROP_NEW_LINE・SplFileObject::READ_AHEADの設定を追加しています。すると、空行をスキップして読み込んでくれます。---実行すると、このように空行がスキップされ、読み込まれました。"170"}終わりに今回はテキストとCSVファイルをSplFileObjectクラスを使って読み込んでみました。CSVファイルについてもsetFlagsメソッドに定数を設定することで、簡単に読み込むことができました。SplFileObjectクラスには、他にもメソッドが用意されています。公式のドキュメントのこちらに詳細な情報があるので確認してみてください。独学に限界を感じたら、オンラインで学んでみよう!本当にわからない場合は、知っている人に聞くと近道になります。・PHP/Laravelのおすすめプログラミングスクール5選!PHP/Laravelのおすすめプログラミングスクール5選!PHPやLaravelが学べるプログラミングスクールを5つ選んで比較してみました。総合的にみると、Freeksがサブスク型で始められて、就職支援まで行ってくれるので良さそうでした!PHP/Laravelが学べるプログラミングスクール5選ゲス...codelikes.com2022.10.15PHPプログラミングシェアするTwitterFacebookはてブPocketLINEコピーyasuakiをフォローするyasuakiコードライクJavaScriptJavaScriptのcontinueの使い方!サンプルコード3つ!JavaScriptのcontinueの使い方について書いています。continueについて解説した後に、下記のことについて書きました。・continueをラベルで使う方法・continueはforEachで使えるのか?・continueと...PHPPHPでファイルに書き込む2つの方法!PHPでファイルに書き込む方法について書いています。ファイルに書き込みをする時には、下記の2つの方法があります。・ファイルをfopen関数で開いて書き込む・file_put_contents関数を使うfile_put_contents関数の...swiftSwiftの学習におすすめな本3選!【現役エンジニア選定】Swiftの学習におすすめの本を3つ紹介しています。最初にSwiftについて簡単に説明して、その後におすすめの本を紹介しました。最後にSwiftを「どの本で学ぶのが良いか」の考察をまとめています。筆者の観点からレベル別に初級者・中級...Python【Python入門】例外処理を書く方法!(try/except)Pythonの例外処理についてまとめました。最初にPythonの例外処理について解説しています。その後に下記について書いています。・例外を処理の任意の箇所で発生させる(raise)・エラーが起きなかった時の処理を書く(else)・処理の最後...JavaScript[JavaScript入門]コメントとは?コメントを書く方法!JavaScriptでコメントを書く方法と、コメントアウトについて書いています。JavaScriptのコメントとは?コメントは、スクリプトに処理の内容などの説明を書いておけるものです。commitコマンドの使い方について書いています。gitコマンドを使用して、リポジトリに対してコミットからプッシュまでを行う流れについては、こちらに書いているので確認してみてください。commitコマンドに着目...JavaScriptJavaScriptで配列を結合する方法3選!JavaScriptで、配列を結合する方法について書いています。下記のメソッドや構文を使うことで、配列を結合することが可能です。・スプレッド構文・concatメソッド・pushメソッドそれぞれについて、次項から詳しくみていきます。スプレッド...LaravelLaravelのBreezeを使って、ログイン認証画面を作成する方法!LaravelのBreezeを使って、ログイン認証画面を作る手順について書いています。最初にBreezeのダウンロードや必要な準備について書いていて、そのあとにデフォルト・Vue・Reactそれぞれで使用した場合にどうなるか試してみました。コメントをキャンセルメールアドレスが公開されることはありません。名前メールサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Δプロフィールyasuaki福岡でフリーランスをやってます。業界歴13年になりました、SESで働くことがほとんどです。なんでもやってますが、Webが得意です。このブログではプログラミング技術の内容を中心に、たまに商品レビューとかを書いています。配列のまとめ要素を追加する要素を削除する配列を結合する要素を含むか確認する要素数を数える配列の値を展開するPHP/Laravelの学習におすすめの本を選定!・PHPの学習におすすめの本6選!【現役エンジニアが選定】PHPの学習におすすめの本6選!PHPの学習におすすめの本を6つ紹介しています。Laravel・CakePHP・SymfonyなどのWebフレームワークやWordPressなどに使われているPHP。フレームワークの内部のコードや、使用されているシステムのコードを理解するた...codelikes.com2022.08.04・Laravelの学習におすすめの本3選!【現役エンジニアが選定】Laravelの学習におすすめの本3選!(本が必要?)今回はLaravelの学習にオススメの本を3つ紹介しています。学習するにあたって本が必要か考えてみました。Techpit前半はPHPのみでEvernote風メモアプリケーションを開発し、後半は同じものをLaravelで開発する。フレームワークを使用しない場合の開発と、Laravelのメリットを実際に開発することで体感。開発を通じて、簡単なアプリケーションの作り方やSQLの書き方、dockerの使用方法などを学ぶ。商品レビューゲーム食レポお問い合わせホーム検索トップサイドバータイトルとURLをコピーしました。