0

ftp 経由で 1 日に 2 回配信される csv ファイルがあります。このファイルを開くためにphpファイルを作成し、カテゴリ列でフィルタリングし、特定の用語/用語を含まない行を削除してからファイルを保存しようとしています。

私はインターネットで見つけたコードのスニペットの多くのバリエーションを試しましたが、それを機能させる方法を一生理解することはできません.

この質問で見つかったコードのバリアントを使用してみましたが、私のシナリオでは機能しませんでした

PHPを使用して単語またはテキストでcsvファイルをフィルタリングします

私が編集しようとしているcsvファイルがここにあるのに役立つ場合: http://accurateav.co.uk/sahara/saharafeed.csv

<?php
$file  = fopen('saharafeed.csv', 'r');

// You can use an array to store your search words, makes things more flexible.
// Supports any number of search words.
$words = array('casio');    
// Make the search words safe to use in regex (escapes special characters)
$words = array_map('preg_quote', $words);
$regex = '/'.implode('|', $words).'/i';

while (($line = fgetcsv($file)) !== FALSE) {  
    list($ExportDate, $ItemCode, $Manufacturer, $Model, $ProductName, $DealerPrice, $Stock, $RRP, $Category, $ShortDesc, $LongDesc, $Weightkg, $EAN, $NonStock, $LargePictureURL, $SpecSheet, $HiResPhoto1, $HiResPhoto2) = $line;

    if(preg_match($regex, $Category)) {
        echo "$ExportDate, $ItemCode, $Manufacturer, $Model, $ProductName, $DealerPrice, $Stock, $RRP, $Category, $ShortDesc, $LongDesc, $Weightkg, $EAN, $NonStock, $LargePictureURL, $SpecSheet, $HiResPhoto1, $HiResPhoto2<br />\n";
    }
}

?>

これは、Casio カテゴリの製品のみを表示するようにカテゴリをフィルタリングするためにこれまで使用してきたコードですが、スクリプトを実行すると、casio カテゴリに多数の製品があるにもかかわらず結果が表示されません。

4

2 に答える 2

2

間違った列を検索していると思います。casioメーカー欄の中にあります。代わりにそこで検索する必要があります。次の例を検討してください。

$i = 0;
$manufacturer_key = null;
$needles = array('casio', 'nec', 'hitachi');
$results = array();
$columns = array();
if(($handle = fopen('saharafeed.csv', 'r')) !== false) {
    while(($data = fgetcsv($handle, 4096, ',')) !== false) {
        if($i == 0)  {
            // sets the key where column to search
            $columns = $data;
            $i++; $manufacturer_key = array_search('Manufacturer', $data);
        } else {
            foreach($needles as $needle) {
                if(stripos($data[$manufacturer_key], $needle) !== false) {
                    $results[] = $data;
                } 
            }   
        }
    }
    fclose($handle);
}

array_unshift($results, $columns);

echo '<pre>';
print_r($results);
echo '</pre>';

の出力例casio:

Array
(
    [0] => Array
        (
            [0] => ExportDate
            [1] => ItemCode
            [2] => Manufacturer
            [3] => Model
            [4] => ProductName
            [5] => DealerPrice
            [6] => Stock
            [7] => RRP
            [8] => Category
            [9] => ShortDesc
            [10] => LongDesc
            [11] => Weightkg
            [12] => EAN
            [13] => NonStock
            [14] => LargePictureURL
            [15] => SpecSheet
            [16] => HiResPhoto1
            [17] => HiResPhoto2
        )

    [1] => Array
        (
            [0] => 11/06/2014
            [1] => 1610044
            [2] => NEC
            [3] => 60003221
            [4] => NEC  NP14ZL
            [5] => 999
            [6] => 0
            [7] => 1348.65
            [8] => Projectors Accessories
            [9] => 2.97-4.79:1 Zoom Lens
            [10] => Replacement 2.97–4.79:1 Zoom Lens compatible with the following products:

... and many more

結果を csv 形式に戻します。

$fp = fopen('file.csv', 'w');

foreach ($results as $row) {
    fputcsv($fp, $row);
}

fclose($fp);
于 2014-06-11T12:31:52.327 に答える
0
Remove the line matching by a regular expression (by eliminating one containing digital   characters, at least 1 digit, located at the end of the line):

sed '/[0-9/][0-9]*$/d' filename.txt

于 2014-06-11T11:48:52.350 に答える