問題タブ [splfileobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 集計ベースのデータ ファイル php を解析する
それぞれのコンテンツを異なるデータベーステーブルに挿入するために、(PHP で) 解析するファイルがいくつかあります。
最初のポイント: クライアントから 6 つのファイルが提供されました。5 つのファイルは値がカンマで区切られた CSV です。最後の 1 つは同じデータベースからのものではなく、その内容は集計ベースです。
SplFileObject を使用してファイル コンテンツの各行でメソッドを実行する FileParser を作成しました (基本的に、Symfony2 と Doctrine2 を使用して、各データセットでエンティティを作成し、データベースに永続化します)。
しかし、SplFileObject を使用して集計ベースのテキスト ファイルを解析することはできません。期待どおりにコンテンツを行に分割しません...
おそらくクライアントのファイルのひどいフォーマットに関連していますが、彼らとの長い議論の後、残念ながら、いくつかの許容できる理由(彼らの側の制約)のために、彼らは本当に私のために別のフォーマットを手に入れることができません.
ファイルは現在 49459 行の長さなので、このステップではメモリが重要だと思います。そのため、SplFileObject の方法を機能させる必要がありますが、その方法がわかりません。
ファイルの抜粋は、次の場所にあります: Data-extract-hosted
php - ファイルの特定の位置に文字列を追加する
このファイル test.txt があるとします:
{
と の間にテキストを追加します}
。
私はこれを試しました:
しかし、出力は です{test
。w+
(result-> test
)、a+
(result->{}test
編集:ファイルのすべての内容をメモリにロードしたくないことを忘れていたので、使用していますSplFileObject
php - SplFileObject() を使用してファイルに書き込む
SplFileObject() を使用してファイルを 1 行ずつ編集しようとしています。編集したいファイルの行を選択できます。しかし、その行に $string を書き込むにはどうすればよいでしょうか?
行を取得するための私のコードは次のとおりです。
その行に文字列を挿入するにはどうすればよいですか?
ファイルを上書きしたくないことに注意してください。特定の行に $string を挿入したいだけです。
php - RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 アップロード画像
私はlaravel 4(最終更新)を使用しており、画像(ロゴ/アバター)をアップロードできるフォームを作成しています。私はMAC OSを使用しており、崇高な Text 3、laravel、およびMAMP Applicationsを使用しています。私の設定はすべて正しく設定されており、実行上の問題はありません。
私の問題は、フォームから到達フィールドを送信すると、次のエラーが発生することです: RuntimeException SplFileInfo::getSize(): stat failed for /Applications/MAMP/tmp/php/phpRUJfMX
私のフォームnameOfTheForm.blade.phpのコードは次のとおりです。
ここに私のコントローラーからのコードがあります:
アップロードされたファイルのコードは完璧に機能します。選択したフォルダーにファイルを登録します。ルートに問題はありません (コードのこの部分を表示する必要はありません)。
しかし、フォームを送信すると、次のエラーが表示されます: RuntimeException SplFileInfo::getSize(): stat failed for /Applications/MAMP/tmp/php/phpRUJfMX
エラー情報の詳細: open:/Applications/MAMP/htdocs/nameOfMyProject/vendor/laravel/framework/src/Illuminate/Validation/Validator.php
Laravel が (stat - ファイルに関する情報を提供する) 必要があるようです。つまり、アップロードされたファイルからの情報、ここではサイズが必要ですが、ここが $uploaded である行の直前にコントローラーでこれを試します選択したフォルダーにファイルを移動する場所:
しかし、私がそれをしたとき、別のエラーが発生しました: バリデーターはファイルを画像として認識しません** et ask me to upload a valid format . 最初に発生したエラーを修正する必要があると思います(SplFileInfo::getSize())
何かアイデアがあれば... ありがとうございます。
php - CSV を読み取る PHP SplFileObject で非標準文字をサポートする方法
次のような CSV ファイルを読み取る短いスクリプトがあります。
これは問題なく動作しますが、一部の非標準文字に問題があります。CSV にはドイツ語の単語がいくつかありますが、私の特定の問題は、ウムラウトが難しいことです。出力される行のタイプの例は次のとおりです。
Jürgenのüは¦文字に置き換えられます。
前に次のコードを入れてみました:
しかし、それは効果がありませんでした。
Vi で csv ファイルを開くと ü が正常に表示されるので、ファイルはサーバー上で正しいです。
CSVを解析するときにPHPがドイツ語の文字をうまく処理する方法を教えてもらえますか?
php - SPLFileObject の PHP mkdir
次のコードを使用して、TXT ファイルに基づいて n 個のディレクトリを作成しようとしています。
私が期待しているのは、artists.txt <- $line にある各行に基づいて mkdir が namefolder を割り当てることですが、ディレクトリは名前なしで作成され、mkdir が $line を文字列として使用しない理由がわかりません。
何か案は?
php - PHPで「file vs SplFileObject」をロードするための巨大なファイル
HUGE という名前の 700 万行のテキスト ファイルを読み込もうとしています。最初の 1 万行を読み取ってから削除しようとしています。私は現在、このように SplFileObject を使用しています...
私はまだHUGEを持っていません。SplFileObject がそのような巨大なファイルをロードできるかどうかを知る必要があります。行を削除するたびに HUGE の長さを計算する必要があります。count(array_HUGE) はすぐに長さを教えてくれるので、「ファイル」は有望に思えます。今すぐデザインを決定する必要があります。2 つのうち、フットプリントが小さく、HUGE の読み込みが速いのはどれですか?
php - SplFileObject + LimitIterator + オフセット
私は2行のデータファイルを持っており(私の例のためだけに2行、実際には、そのファイルには数百万行を含めることができます)、SplFileObjectとLimitIteratorをオフセットで使用しています。ただし、この組み合わせでは、場合によっては奇妙な動作が発生します。
出力: 01
しかし、$offsetを1に設定すると、出力は空白になります (foreach はどの行も反復しません)。
私のデータファイルにはこれが含まれています:
私が間違っていることは何ですか?
ありがとう
php - PHP - SplFileObject - seek() メソッドを使用すると 2 行目の出力が正しくない
更新に移動して、現在の実際の問題を確認してください。古い質問は、Bert Peters によって提出された最初の回答で既に解決されています。
古い質問: file.1.txt、file.2.txt、file.3.txt などの名前のファイルがいくつかあります... SplFileObject で最初のファイルを読み取り、foreach ループを使用してそのコンテンツを反復処理しています:
最初に読んでいるファイルの内容に応じて、他のファイルが読み取られる場合と読み取られない場合があります。いずれの場合も、次のステップで使用できる他のファイル (file.2.txt または file.3.txt) が 1 つだけ存在する必要があります。したがって、 foreach ループ内のどこかに、これを処理する if ステートメントがあります。
すべてのファイルは同じ構造を持っているため、問題が発生します。次のファイルを読み取るために新しい foreach を作成したくありません-私が書いたように、まったく必要ないかもしれないので、新しい foreach を作成する代わりに既存の foreach を使用したいと思います。$file 変数を他のファイルの内容で上書きし、foreach または他のループを 1 つだけ使用して反復する可能性はありますか? 例えば:
goto
この問題を解決するためにステートメントを使用したくありません。再帰は適切な解決策のようですが、その場でループ内のオブジェクトを変更する方法があれば、私はこの解決策を好みます。
更新: 「古い質問」で述べたように、使用されるすべてのファイル(file.1.txt、file.2.txt、...)は同じ構造を持っているため、同じループをさらに記述してコードをコピーしたくないのはそのためです. 代わりに、すでにソリューションの一部である @Danack のコード (SO チャットで彼が提案) を使用しました。必要なアップグレードなしでより多くのファイルを読み取るための基本的なコードは次のとおりです。
したがって、このコードは問題なく動作し、ファイルの行を期待どおりに出力します。問題は、ファイルの次の行を seek() メソッドで読みたい場合です。次の各行に追加される情報を決定したいからです。したがって、次の行のデータを取得するのに役立つ seek($rowKey + 1) を使用し (行が変更されたときに $file->current() を使用します)、その後、seek($rowKey) を呼び出して前の行に移動すると、次のファイルは最初の行を 2 回出力し、2 番目の行は見落とされます。3行目以降はきれいに印刷されています。これは、以下のコードで達成される問題です。
file.1.txt と file.2.txt の代わりにカスタム .csv ファイル (少なくとも 5 つの空でない行を含む) を適用すると、2 番目と 3 番目の出力が同じであることがわかります (2 番目と 3 番目の出力は最初とfile.2.txt の「2」行目)。ここで何が問題なのですか?
php - なぜこれは最後の行を出力するのですか? (SplFileObject)
fgets() はファイルの次の行に進みませんか? もしそうなら、なぜファイルはまだ 2 番目の !$file1->eof() ステートメントを渡すのですか? これは ->valid() でも発生します。