簡體   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