0

データのリストを .txt ファイルにエクスポートするプログラムがありますが、多くのデータは不要です。すべてのデータは次のようにフォーマットされます。

PUB DATE: 03/16/2012
END DATE: 06/10/2012
PUB:  my company
ADNUM: 00237978
CLASS: 0825
AD TYPE: RE
COLUMNS: 2.00
GRAPHIC FILE: some_image.jpg
AD TEXT: Text
*** end of ad

このようなレコードが 20 から 50 あります。ファイルを検索して、0 で始まる CLASS を持つレコードを削除する必要があります。したがって、ゼロで始まる CLASS を持つ広告レコードを検索して見つけた場合そのレコードにあるものはすべて削除されます。これは .xml なら簡単ですが、.txt ファイルなので大変です。すべての不良データを削除すると、正常なデータが新しいファイルに保存されます。

4

2 に答える 2

1
$keep = array();
$filePath = '/path/to/txt/file.txt';
$textData = file_get_contents($filePath);
$records = explode('*** end of ad', $textData);
foreach ($records as $record) {
    if (empty($record)) {
        continue;
    }

    if ( ! preg_match('/CLASS:\s+?0/', $record)) {
        $endDate = array();
        preg_match('/END\sDATE:\s?\d{0,2}\/\d{0,2}\/\d{0,4}/', $record, $endDate);
        if ( ! empty($endDate)) {
            $parts = explode(':', $endDate[0]);
            $dateString = trim($parts[1]);
            $date = DateTime::createFromFormat('d/m/Y', $dateString);
            $currentDate = new Date();
            $currentDate->setTime(0, 0, 0);
            if ($currentDate->format('U') > $date->format('U')) {
                continue;
            }
        }
        $keep[] = $record;
    }
}
file_put_contents($filePath, implode('*** end of ad', $keep) . '*** end of ad');
于 2012-05-16T19:30:49.867 に答える
0
$keep = array;
foreach(explode('*** end of ad', file_get_contents($filePath) as $record):
  if(!preg_match('^CLASS:\s*0825'/, $record))
    $keep[] = $record;
endforeach;

file_put_contents($filePath, implode('*** end of ad', $keep) . '*** end of ad');
于 2012-05-16T19:07:43.857 に答える