0

クライアントの注文を含む非常に大きな .txt ファイルがあり、それを mysql データベースに移動する必要があります。ただし、情報があまり変わらないため、どのような正規表現を使用すればよいかわかりません。

-----------------------
4046904


KKKKKKKKKKK
ローラ・マイヤー
マスミューチュアル生命保険
153 ヴァドネ ストリート

チコピー、マサチューセッツ州 01020
私たち
413-744-5452
lmeyer@massmutual.co...


KKKKKKKKKKK
373074210772222 02/12 6213 該当なし
-----------------------
4046907


KKKKKKKKKKK
ベンカット・タラディブデュラ

6105 ウェスト 68 ストリート

タルサ、OK 74131
私たち
9184472611
venkat.talladivedula...


KKKKKKKKKKK
373022121440000 06/11 9344 該当なし
-----------------------

私は何かを試しましたが、名前を抽出することさえできませんでした...これは成功しなかった私の努力のサンプルです

$htmlContent = file_get_contents("orders.txt");

//print_r($htmlContent);

$pattern = "/KKKKKKKKKKK(.*)\n/s";
preg_match_all($pattern, $htmlContent, $matches);
print_r($マッチ);
$name = $matches[1][0];
エコー $name;

4

4 に答える 4

4

このような場合、正規表現を避けたい場合があります。データは行ごとに明確に整理されているため、fgets() を使用して行を繰り返し読み取り、その方法でデータを解析できます。

于 2010-10-24T22:57:52.787 に答える
0

このファイルは正規表現で読み取ることができますが、すべてのフィールドを読み取れる正規表現を作成するのは非常に複雑になる場合があります。

このファイルを 1 行ずつ読み、それぞれを解析して、含まれているデータの種類を検出することをお勧めします。

于 2010-10-24T23:01:04.680 に答える
0

データがどこにあるか (つまり、どの行にあるのか) が正確にわかっているのに、そのようにしてみませんか?

つまり、次のようなもの

$htmlContent = file_get_contents("orders.txt");

$arrayofclients = explode("-----------------------",$htmlContent);
$newlinesep = "\r\n";
for($i = 0;i < count($arrayofclients);$i++)
{
$temp = explode($newlinesep,$arrayofclients[i]);
$idnum = $temp[0];
$name = $temp[4];
$houseandstreet = $temp[6];
//etc
}

または、単に fgets() を使用してファイルを 1 行ずつ読み取る - 次のようなもの:

$i = 0;$j = 0;
$file = fopen("orders.txt","r");
$clients = [];
while ($line = fgets($ffile) )
{
    if(line != false)
    {
        $i++;
        switch($i)
        {
        case 2:
            $clients[$j]["idnum"] = $line;
            break;
        case 6:
            $clients[$j]["name"] = $line;
            break;
        //add more cases here for each line up to:
        case 18:
            $j++;
            $i = 0;
            break;
        //there are 18 lines per client if i counted right, so increment $j and reset $i.
        }
    }
}
fclose ($f);

正規表現を使用できますが、この状況では少し厄介です。

ニコ

于 2010-10-24T23:10:25.870 に答える