【发布时间】:2020-03-04 22:19:55
【问题描述】:
解决了这个问题:
我需要做的就是向 fgetcsv 添加一个分隔符
while (false !== ($data = fgetcsv($ih,10000,';')))
我们从供应商处收到一份文件。该文件有 60k 行,我们需要以某种方式自动过滤此文件。
csv 文件有 3 列:SKU、类别、价格。 我已经使用 excel 过滤了这个文件,我发现我们只需要这个文件中的 700 个产品。它们都具有相同的“注射器”类别
我写了一个 php 脚本,但它给了我一个空白的输出。有人可以解释我的代码有什么问题吗?
<?php header('Content-type: text/plain; charset=utf-8');
$input = 'C:\Users\Administrator\Desktop\Data.csv';
$output = 'C:\Users\Administrator\Desktop\Data_changed.csv';
$myfile = fopen("C:\Users\Administrator\Desktop\data_log.txt", "w") or die("Something wrong with this file.");
$vname='The process was successful: '.date('Y-m-d').' day';
fwrite($myfile, $vname);
fclose($myfile);
$injector = "Injector";
if (false !== ($ih = fopen($input, 'r'))) {
$oh = fopen($output, 'w');
while (false !== ($data = fgetcsv($ih))) {
if (strpos($data[1], $injector) !== false) {
// this is where you build your new row
$outputData = array($data[0], $data[1], $data[2]);
fputcsv($oh, $outputData);
}
}
fclose($ih);
fclose($oh);
}
?>
预期输出是 700 个过滤后的产品。
这是 csv 文件的样子:
基本上,我想要的是制作一个脚本,在第二列中找到所有包含文本“Injector”的行。
另外提一下:原始文件带有分号作为分隔符。 窗口的默认分隔符是逗号。
【问题讨论】:
-
"Excel 文件" - 你的意思是 csv 文件,还是有一个实际的 Excel 文件?
-
@MagnusEriksson,是的,csv 文件
-
@Sigitas 你的“是”回答了哪个问题?是 csv 还是 Excel?
-
@user2342558 - 我的第一个问题是他们是否意味着 csv 文件。我认为他们回答说,同时我编辑了评论以包含 "or..." 所以我很确定他们对它是 csv 的意思是肯定的。我的坏...
-
您还应该编辑您的问题以包含来自 csv 的一些示例数据,因为我们不知道它是什么样的。您还应该澄清要过滤它的条件。您基本上是在要求我们帮助您使用一些未知标准过滤一些未知数据。包括你做了什么调试和你的结论。