【发布时间】:2014-06-11 11:17:46
【问题描述】:
我每天两次通过 ftp 传送 csv 文件。我正在尝试编写一个 php 文件来打开此文件,按类别列对其进行过滤,删除其中没有特定术语/术语的行,然后保存文件。
我已经尝试了许多在互联网上找到的 sn-ps 代码变体,但我终其一生都无法弄清楚如何让它发挥作用。
我尝试使用在这个问题中找到的代码变体,但无法使其在我的场景中工作
Filter a csv file by a word or text using php
如果它有助于我尝试编辑的 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";
}
}
?>
这是迄今为止我用来过滤类别以仅显示卡西欧类别中的产品的代码,但是当我运行脚本时,即使卡西欧类别下有许多产品,也没有显示任何结果。
【问题讨论】:
-
好吧,我们希望看到一些尝试和一些关于什么不起作用以及为什么不起作用的描述。这样,任何人都可以提交一份完整的申请,但也可能无法正常工作。不是很有帮助。
-
但与其考虑“过滤”和“删除”行,也许您可以生成第二个文件。遍历第一个文件,仅将要保留的行复制到第二个文件中。之后,删除源文件并重命名目标文件。等等,
-
@GolezTrol 我已经修改了我的原始问题,以包含我目前用于执行过滤部分的代码。
-
您确定卡西欧确实在类别栏中吗?我检查了你的 csv,似乎 casio 总是属于制造商列(即第 3 列)
-
那是我现在感觉很愚蠢!