よろしくお願いします。
旧データのTSVファイルを読み込み、DBのテーブルに新テーブルへ
INSERT、UPDATEする処理を作っています。
下記はPHP公式サイトのサンプルコードを少し弄ったものですが
書いているコードはほぼコレです。
php
1<?php 2$row = 1; 3if (($handle = fopen("data.tsv", "r")) !== FALSE) { 4 while (($data = fgetcsv($handle, "", "\t", '"', ",")) !== FALSE) { 5 $num = count($data); 6 echo "<p> $num fields in line $row: <br /></p>\n"; 7 $row++; 8 for ($c=0; $c < $num; $c++) { 9 echo $data[$c] . "<br />\n"; 10 } 11 } 12 fclose($handle); 13} 14?>
ちなみに旧データはこのようになっています
<\t>はTAB区切りを表しています
id<\t>name<\t>address 100<\t>Ando<\t>Tokyo 200<\t>Kawai<\t>kawai.kazuo,kyoko<\t>jiro/hitomi@example.com ...
問題のあるデータレコードは
,"/'@\t といったデリミタとして利用される文字がほぼ全て入っています。
1レコードの特定カラムはダブルコーテーションで囲んでいますが、
どうもダブルコーテーションの中も判定しているようで、fgetcsvで
エスケープ指定している文字以外では区切りと判断してしまっています。
旧データには手を加えたくないのですが、こうも複数種のデリミタ文字が
含まれているとどうエスケープ処理させてよいのか分からず困っています。
非常に初歩的なもだと思い恐縮ですが、ご助言など頂けると幸いです。
よろしくお願いします。
#追記 頂いたご質問について。
上記のTSV例はイメージを掴んでいただくためのサンプルですので
実際扱ってるものと異なってしまうのですが、
例えばID=200のレコードの場合、
200 Kawai kawai
kazuo kyoko jiro
hitomi
example.com
のような感じで返ってきてしまいます。
回答2件
あなたの回答
tips
プレビュー