2

PHPでファイルを読みたいのですが、ファイルの構造は次のとおりです。

text1,text2,text3,.................

...................................

...................................

...................................

...................................

WORD;

NUMBER

col1; col2; col3; [CSV part of the file starts from here]

value1; value2; value3

ファイルのCSV 部分を読み取り、MySql データベースに挿入したいと考えています。探しましfgetCsvたが、できませんでした。それを行う方法は何ですか?

4

2 に答える 2

0

同様のファイルがあり、解析していくつかの列に書き込む必要がありました。を使用して、ファイルを1行ずつ読み取ることにしましたfgetcsv

exec('wc -L file.tmp',$res,$stat);
$length = (int)($stat === 0 ? $res[0] : 200);
$fh = fopen('file.tmp','r');
$fields = false;
while($line = fgetcsv($fh,$length,';'))
{
    if (count($line) <= 1)//not more than one semi-colon
    {
        continue;//not part of csv-section, read on
    }
    if (!$fields)
    {
        $fields = $line;//<-- first line of CSV === columns
        continue;
    }
    //$line should be what you need here.
}

さて、私の場合は、結果を新しいcsvファイルに書き込んで、を使用することにしLOAD LOCAL INFILEました。あなたはそれがどのようにパンアウトしたかをここで読むことができます;-)

于 2012-09-11T07:58:17.093 に答える
0

ファイルの最後の行を読み取って、区切り文字の数を数えてみませんか。その後、適切な数の区切り文字を含む行が見つかるまで、ファイルの各行を読み取ります。これが発生したら、その行から始まる新しい文字列を作成し、csv として解析します。

$arr = @file('foo.php');
$lastLine = $arr[count($arr)-1];
$delimiterCount = substr_count($lastLine,";");
$csvStarted=false;
$csvString="";
foreach($line in $arr) {
    if($csvStarted) {
        $csvString += $line + "\r\n";
    } else {
        if(substr_count($line,";")==$delimiterCount) {
            $csvStarted=true;
            $csvString += $line + "\r\n";
        }
    }
}

コードは効率的ではありませんが、アイデアを提供します。CSV 部分の開始点を見つけたら、ループを中断して残りの配列を内破できます。

于 2012-09-11T08:05:54.610 に答える