[英]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.