【问题标题】:How to fix blank output? PHP Script如何修复空白输出? PHP 脚本
【发布时间】: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 文件的样子:

Sample data example

基本上,我想要的是制作一个脚本,在第二列中找到所有包含文本“Injector”的行。

另外提一下:原始文件带有分号作为分隔符。 窗口的默认分隔符是逗号。

【问题讨论】:

  • "Excel 文件" - 你的意思是 csv 文件,还是有一个实际的 Excel 文件?
  • @MagnusEriksson,是的,csv 文件
  • @Sigitas 你的“是”回答了哪个问题?是 csv 还是 Excel?
  • @user2342558 - 我的第一个问题是他们是否意味着 csv 文件。我认为他们回答说,同时我编辑了评论以包含 "or..." 所以我很确定他们对它是 csv 的意思是肯定的。我的坏...
  • 您还应该编辑您的问题以包含来自 csv 的一些示例数据,因为我们不知道它是什么样的。您还应该澄清要过滤它的条件。您基本上是在要求我们帮助您使用一些未知标准过滤一些未知数据。包括你做了什么调试和你的结论。

标签: php arrays input output


【解决方案1】:

如果您在 Excel 中打开文件,请确保 .csv 以逗号分隔而不是分号分隔。

编辑:您可以通过在记事本/记事本++等文本编辑器中打开文件来检查。

【讨论】:

  • 原始文件带有分号作为分隔符。窗口的默认分隔符是逗号。也许这是一个问题?因为“display_error on”没有显示任何问题。
  • 是的,这将导致您的整行都放入$data[0]。您可以将fgetcsv 中的分隔符作为第三个参数传递。 php.net/manual/en/function.fgetcsv.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多