繁体   English   中英

在解析之前,如何确保CSV文件包含数据?

[英]How do I make sure a CSV file contains data before parsing it?

我有一个PHP文件,尝试打开CSV文件,将数据解析为XML格式,然后保存XML文件。 我遇到了一个挑战,要确保CSV文件在解析任何内容之前确实具有我要查找的数据。

CSV文件将每天使用新信息进行更新,PHP脚本将每天执行以更新XML文件。

我试图使用fgetcsv() PHP函数检查返回的数组是否大于1,但这仅检查CSV中的一行。 我不确定这是最好的方法。

if (($file = fopen('employees.csv', "r")) !== FALSE) {

            if (fgetcsv($file, 1000, ",") > 1) {
                $dom = new DOMDocument();
                $dom->encoding = 'utf-8';
                $dom->xmlVersion = '1.0';
                $dom->formatOutput = true;
                $root = $dom->createElement('employees');

                while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
                    $emp_node = $dom->createElement('employee');

                    $faculty = 'F';
                                        ...   

我希望得到一个保存的XML文件,其中包含从employee.csv文件解析的所有数据。 如果由于某种原因,CSV文件被覆盖而没有数据(空CSV),则我不希望PHP脚本覆盖XML文件。

您不应直接覆盖文件,而应创建新的临时文件,向其中写入已解析的数据,然后删除旧文件并将临时文件重命名为预期名称IF,并且仅在解析顺利的情况下。

检查大小等是天真的-还有很多其他事情可能出错,包括 中间文件等中的CSV内容格式错误。在遇到麻烦的情况下,您最终将没有有效文件,而按照建议的方式,您至少还有最后一个有效文件,就像没有发生任何错误一样。 除非您另外确定(根据任何选择的标准),否则您应该始终假设解析出错。

我会做这样的事情:

<?php

$content = file_get_contents('employees.csv');
if (!empty($content))
{
   $lines = explode("\n", $content);
   foreach ($lines as $line)
   {
       // $line = 1 line
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM