【问题标题】:Read a csv file and create another csv file using php读取一个 csv 文件并使用 php 创建另一个 csv 文件
【发布时间】:2014-12-15 20:50:21
【问题描述】:

我有一个.csv 文件,当我通过记事本打开它时,它看起来像:

ID501501503502

当我通过 php 在浏览器中打印它时,它看起来像

ID 501 501 503 502

我的代码是:

$handle = fopen("MonC1.csv", "r");
$data = fgetcsv($handle, 0);
$fh = fopen('php://output', 'w');
if (! empty($data)) {
  foreach ($data as $item) {
      echo $item."<br>";
     //fputcsv($fh, array($item));
  }
}

所以基本上for循环内的br标签不起作用。这是我的第一个问题。

第二个问题是即使我使用fputcsv(now it is turned off),它也不会创建一个实际的csv 文件。

现在我的问题是为什么它在记事本中没有空间,当我在浏览器中打印时它有空间?

我只有一栏,没有别的。

非常感谢任何帮助。提前致谢。

【问题讨论】:

  • 该脚本实际生成的 HTML 是什么?
  • 实际上是打印 csv 文件的内容。因此,如果源文件是 csv 文件包含 ID123,则 echo 正在打印 ID 1 2 3 。就是这样
  • 打印在哪里? @EWit 询问 html 响应的来源。
  • 尝试了 chr 的东西,但没有任何改变。
  • 在我看来,您的原始文件是以 UNIX 行结尾保存的,然后您在 Windows 中使用 fgetcsv,因此整个文件被读取为一行。整个输出的末尾可能有一个&lt;br&gt;

标签: php csv


【解决方案1】:

正如我在评论中提到的,看起来您的原始文件以 UNIX 行结尾保存,然后您在 Windows 中使用fgetcsv,因此整个文件被读取为一行。整个输出的末尾可能有一个&lt;br&gt;

因此,在处理您的文件之前,您需要对其进行预处理以转换行尾。

在 Linux 上,实用程序 unix2dos 可以满足您的需求。或者,您可以简单地将文件中的\n 替换为\r\n

另一个问题是fgetcsv 不会将整个文件转换为数组。相反,它从您的文件句柄中读取一行,并将其转换为数组。您需要读取循环内的行:

while (($data = fgetcsv($handle)) !== FALSE) {
  // $data contains one line of the CSV, in array form
  // now you can fputcsv the single line
}

【讨论】:

  • 太棒了。现在我将数据写入一个实际的 csv 文件。仍然不是 100% 完美,但由于它与这个问题无关,所以我可能会在花一些时间后发布另一个问题。再次感谢您的帮助。
  • 我认为它工作不正常。我做了 while (($data = fgetcsv($handle)) !== FALSE) { echo $data[0]."
    "; } 仍然在浏览器中作为单行输出。不确定我在做什么。
  • 您没有修复行尾。有两件事需要解决;您只添加了 while 循环。
  • 不确定如果数组包含一行,我怎么能放'\n'。
  • 我需要用\n替换\r吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多