私はcsvファイルから素早く読み込む方法を見つけようとしています。最初に数行をスキップし、約20行を読み込み、読み込みを停止します。今は唯一の解決策はfreadを使用しており、これはかなり非効率的です。PHPが読み込み中にスキップする
答えて
を挿入することができます。最速のCSVパーサーはfgetcsv
に組み込まれています。同じように使用
function csv_slice($fp, $offset = 0, $length = 0) {
$i = 0;
while (false !== ($row = fgetcsv($fp))) {
if ($i++ < $offset) continue;
if (0 < $length && $length <= ($i - $offset - 1)) break;
yield $row;
}
}
:
$fp = fopen('file.csv', 'r');
print_r(
iterator_to_array(
csv_slice($fp, 5, 2) // start after 5th row, return 2 rows
)
);
fclose($fp);
私はメモリ消費量を低く抑えるために、ここで発電機を使用しましたしたがって、それはすべての可能な信頼性の高い方法の最速になるだろう。必要に応じて、一時的な配列に簡単に置き換えることができます。
行末に関するいくつかの仮定をすることができれば、行末の範囲を見つけるまでバイト単位で読むことができます。しかし、率直に言って、私はそれをしません。
ありがとう、特に@bishop – Karuhanga
file()
を試してみてください。それはあなたのファイルのすべての行を読んで、あなたが望むようにそれを読むことができます。たとえば:
$lines = file("myfile.txt");
$lineCounter = count($lines);
if($lineCounter > 20){
$startsAt = 21; //Skip 20 lines
for($i = $startsAt; $i < $lineCounter; $i++){
$line = $lines[$i];
//Do whatever you want with the line contents
}
}
は、あなたが
<?php
$row = 1;
if (($handle = fopen("ptt.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
echo "<TR>"; // OPEN ROW
if(strpos($data[$c], 'Finished') !== false) {
$c++;
echo "<TD nowrap>" . $data[$c] . "</TD>";
}else{
echo "<TD nowrap>" . $data[$c] . "</TD>";
}
echo "</TR>"; // CLOSE ROW
}
}
fclose($handle);
}
?>
以下のコードのこの部分を持っている場合は、
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($row == 20){ $row++; continue; }
今whileループの後
if($row == 20){ $row++; continue; }
を追加した場合のは、言ってみましょう行20から始める場合は、c ontinue reading
別の例を考えてみましょう。あなたは1から始まる40行で読むのをやめたい場合は、特定のCSV形式を尊重CSVをスクロールする唯一の方法は、パーサを呼び出すことです
if($row == 40){ $row++; exit; }
@ref:http://stackoverflow.com/questions/10901113/skip-the-first-line-of-a-csv-file – unixmiah
- 1. PHP読み込み中のコンテンツがページとして読み込まれる
- 2. リストビューの読み込み中にGIFが読み込まれる
- 3. OAuthエクステンションの読み込み中PHP
- 4. ページの読み込み中にモーダルを読み込む読み込み後に
- 5. PHPで読み込み中にエラーが発生しました
- 6. PHP読み込み
- 7. ログイン中にAccounts-UIが読み込み中にハングアップする
- 8. ページの読み込み中に読み込み中のGIFを追加VB.NET
- 9. ページの読み込み中に読み込む
- 10. 画像読み込み中にアイコンを読み込む
- 11. カスタム「読み込み中...」UIView
- 12. 読み込みインクルードファイルがPHPスクリプトの読み込みを遅くしますか?
- 13. PHP読み込みXMLファイル
- 14. 遅延読み込みDIV埋め込みFlickrギャラリーとプリロードからスキップする
- 15. PHPウェブアプリケーションの読み込みが遅い
- 16. テキストファイルの行を読み込み行をスキップする
- 17. Android:現在のフラグメントと読み込みをスキップする
- 18. phpオブジェクトをテキストファイルに書き込み、読み込みますか?
- 19. モーダルウィンドウの読み込み中にアプリケーションがクラッシュする
- 20. ページの読み込み中にCodeIgniterでエラーが発生する
- 21. jquery-mobile CSSがページの読み込み中にブレークする
- 22. Androidエミュレータの読み込み中に問題が発生する
- 23. Google静的地図が読み込み中にハングする
- 24. 画像の読み込み中にメモリリークが発生するC#
- 25. Apache Ignite.NET ignite.jni.dllの読み込み中にエラーが発生する
- 26. BackgroundWorkerでデータを読み込み中にGUIがフリーズする
- 27. main.mのエラーで読み込み中にアプリケーションがクラッシュする
- 28. Codeigniterライブラリ - カスタムクラスの読み込み中にエラーが発生する
- 29. WPFアニメーションの読み込み中にデータトリガーが発生する
- 30. ウェブサイトの読み込み中にバグが発生する
なぜフリーダイヤルを避けるのですか?それは 'fgetcsv()'が内部的に使用するものです。それらの行は、改行がどこにあるかを知るために、phpに読み込まなければなりません。それらの行をスキップ/無視することを選択した場合、それはPHPの問題ではなく、データが読み込まれることになります。 –
ファイル全体を 'file()'で配列に読み込んだり、 'array_slice()'を使って必要な行を取得することができます。 – Barmar
しかし、ファイルが大きければ、それはより遅く無駄になります。あなたの元の方法はおそらく最高です。 – Barmar