問題タブ [fgetcsv]
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 - fgetcsvが返すエントリが多すぎます
私は次のコードを持っています:
問題は、ファイルの内容が次のようになっていることです。
等々
ifのテストでは、3つのエントリが表示されることがあります。最初のエントリは番号、2番目のエントリは名前、3番目のエントリは...emtpyです。
これにより、ifブロックが失敗し、私は悲しくなります。> = 2のifブロックテストを実行できることはわかっていますが、2つの項目があるという事実を認識させる方法はありますか?fgetcsvが行の終わりに「謎の」文字を見つけているのは好きではありません。
これはおそらく、Windowsベースのファイルエラーを実行しているUNIXサーバーですか?もしそうなら、そして私はdos2unixなしでubuntuサーバーを実行しています、どこでそれを入手できますか?
php - エスケープされていないエンクロージャーを含む CSV ファイルの読み取り
CSV ファイルを読み込んでいますが、一部の値がエスケープされていないため、PHP が間違って読み込んでいます。悪い行の例を次に示します。
" 635"," ","AUBREY R. PHILLIPS (1920- ) - 北ウェールズと思われる急勾配の川の渓谷にあるコテージを描いたパステル画、2000 年に署名および日付入り、66cm x 48cm の額入り。 「ハーベスト タイム、サマセット」署名および日付 '87、フレーム入り、69cm x 49cm. (2) NB - オーブリー フィリップスは、スタウアブリッジ スクール オブ アートで学んだウスターシャーのアーティストです。","40","60","WAT ","絵画、版画、水彩画",
Harvest Time、Somersetが引用符で囲まれていることがわかります。これにより、PHP はそれを新しい値と見なします。
各行で print_r() を実行すると、壊れた行は次のようになります。
他の正しい行よりも多くの配列要素が含まれるようになったため、これは明らかに間違っています。
私が使用しているPHPは次のとおりです。
間違った量の値を持つ行が入れられ$error_rows
、残りは大きな$lots
配列に入れられます。
これを回避するにはどうすればよいですか? ありがとう。
php - fgetcsv - 最初の列の値に対して関数を実行しますか?
2行のcsvがあります。
これは、最初の配列の最後に改行がある 2 つの配列を返します。
最初の列にアクセスしたい場合は、
そして得る
それでも、次のようなことをすると:
$post_ID で出力がゼロになる
最初の各列の値に対して関数を実行するにはどうすればよいですか?
php - PHP 5.3: fgetcsv と文字の欠落
メソッドを使用してcsvファイルから読み取るfgetcsv
と、文字列の先頭にある「Å」と「Ø」が削除されます。
私のcsvに1行しか含まれていないと仮定するとÅbyÅÅÅÅhøjÅ
、出力は次のようになりますbyÅÅÅÅhøjÅ
(先頭に「Å」がないことに注意してください)
何か案は?
php - PHP fgetcsv() ファイルの検索と上書き
「コード」と「説明」を含む .csv ファイルがあります。.csv を検索したいのですが、重複する「コード」が見つかった場合は、行全体を置き換えます。
すなわち。csvファイルの:
「STA-102」が見つかった場合は、説明を次のように置き換えます。
これらは動的なので、if ステートメントが必要です。これを使用して行うことができますfgetcsv()
か?
以下は機能しませんが、私が今知っているのはそれだけです:
そもそもファイルに書き込むために、次のものが必要です。
上記の内容を if ステートメントに組み込んで、必要に応じてコードを上書きするにはどうすればよいですか?
mysql - Mysql_fetch_arrayから単一の行/データをフェッチする方法は?
fgetcsv()を使用してPHPで.csvファイルを読み取っています。これで、.csvファイルから読み取ったデータをフェッチできるようになりました。次に、フェッチ結果でSKU列を確認する必要があり、それに応じて挿入または更新を実行する必要があります。SKUがすでに存在しているとすると、テーブルの行を更新する必要があります。そうでない場合は、新しいレコードを挿入する必要があります。私は次のコードを書いています...Plzchecknどこで間違いをしているのか教えてください-:
php - MySQL は成功したすべての挿入クエリを挿入していません...なぜですか?
先に進む前に、これは純粋に直感の問題です。つまり、PHP/MySQL コードの特定のバグを解決するための回答を求めているわけではありません。むしろ、問題を解決するために考慮しなければならない可能性のある問題の範囲を理解したいのです。これらの目的のために、私はコードを投稿したり、スクリプトを添付したりしません。私が何をしたか、何が起こっているかを説明するだけです。
私はPHPスクリプトを書いています
- MySQL データベース テーブルに挿入する X レコードの CSV テキスト ファイルを読み取り、該当する場合は重複エントリを更新します。
- 上記のレコードを、そのデータ セットの「ルート」テーブルと呼ぶものに挿入します。
- 「ルート」テーブルから特定のフィールドのサブセット レコードを選択し、それらのレコードを「マスター」テーブルに挿入します。と
- 配布用のマスター テーブルから出力エクスポート テキスト ファイルを作成します。
30 分ごとにスケジュールされた個別の cron タスクを介して処理している CSV ファイルがいくつかあります。さまざまなソースから、ファイルからルート テーブルへの推定 420,000 の挿入トランザクションと、スケジュールされたタスクを介したルート テーブルからマスター テーブルへの別の 420,000 の挿入トランザクションがあります。
タスクの 1 つは、それ自体で約 400,000 レコードの CSV ファイルに関係します。処理にエラーは含まれていませんが、ここに問題があります。MySQL がルート テーブルに正常に挿入されたことを示す 400,000 レコードのうち、実際にルート テーブルに格納されているのは約 92,000 レコードのみです。仕事。
他のスケジュールされたタスクは、それぞれ約 16,000 および 1,000 のトランザクションを処理し、これらのトランザクションは完全に処理されます。実際、トランザクションの数を 400,000 からたとえば 10,000 に減らすと、これらのプロセスも問題なく処理されます。明らかに、それはここでの目標ではありません。
この問題に対処するために、私はいくつかの救済策を試しました...
- サーバーのメモリを増やす (および php.ini ファイルの最大制限を増やす)
- 拡張メモリを備えた専用データベースを取得する (共有 VPS データベースとは対照的に)
- コードを書き直して、メモリを消費し、実行時に fgetcsv() プロセスを処理する格納された配列を大幅に排除する
- INSERT DELAYED MySQL ステートメントを使用する (プレーンな INSERT ステートメントではなく)
...そして、これらの救済策はどれも期待どおりに機能していません.
これまでに取られた措置が成功していないことを考えると、この時点でどの範囲の是正措置を検討する必要がありますか? ありがとう...
mysql - LOAD DATA が利用できません。fgetcsv がタイムアウトしました。代替案?
競走馬データの CSV を週に 1 回アップロードするサイトがあります。CSV には、現在英国で登録されている約 19,000 頭の競走馬の詳細が含まれており、サイズは平均で約 1.3 MB です。そのcsvを処理し、馬が存在し、評価データが変更された場合は馬を更新し、存在しない場合は追加するスクリプトを持っています。馬が変わらない場合は、次の馬にスキップします。スクリプトは、テストとして使用するホストで実行されていたため、機能します。実行に 5 ~ 6 分かかりましたが (理想的とは言えませんが)、うまくいきました。
ただし、現在、クライアントのホストのステージング バージョンでテストしており、15 分間実行してから 504 タイムアウトを返しています。できる限り htaccess と php.ini の設定を微調整しました。
ホストは共有環境にあるため、MySQL の LOAD DATA を使用できないとのことです。
他にどのような代替アプローチを試しますか? または、たとえば、CSV をチャンクに分割し、それぞれに対して順番にプロセスを実行する方法はありますか?
php - fgetcsv データベースへの挿入エラー
次を使用して、.txt ファイル (csv に変換) をデータベースに挿入しようとしています。
while (($data = fgetcsv($prop, 1000, ",")) !== FALSE) {
ファイル自体を使用してphpmyadminで実行しようとすると機能しますが、テキストには「、」が含まれているため、区切り記号として読み取ろうとして結果を捨てている可能性があります。誰でも助けてもらえますか?
エラーは - 1.何千もの空の結果を配置する 2.結果を正しいフィールドに配置しない
ありがとう
php - PHP を使用して CSV ファイルを MySQL にインポートする
関数を使用して CSV データを MySQL データベースにインポートしようとしていfgetcsv
ます。
問題は、インポート プロセスの間にスタックし、次のエラーが表示されることです。
SQL 構文にエラーがあります。1 行目の 'S',0,0)' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
ファイルは毎回部分的にのみインポートされます。10000 行のファイルのうち、200 ~ 300 行のみがインポートされます。
これが私のテーブルのDDLです:
これまでのところ問題を見つけることができませんでした。ありがとう。