2013-03-16 4 views
1

Я пытаюсь написать некоторый php-код, который принимает $ _GET-данные как входные данные и сохраняет их в csv-файл. При выполнении кода больше, чем один раз мой CSV-файл выглядит следующим образом:Функция php file() создает кавычки и запятые

Date,Time,Temperature,"Air Humidity","Soil Humidity",Light,"Wind Direction","Wind Speed",Rain 
2013-03-16,16:24:27,12,80,40,82,255,10,0 
"2013-03-16,16:24:26,12,80,40,82,255,10,0 
","""2013-03-16,16:24:26,12,80,40,82,255,10,0 
",""",""""""2013-03-16,16:24:25,12,80,40,82,255,10,0 
",""","""""","""" 
",""","""""" 
",""" 
" 

Как вы можете видеть, программа добавляет кавычки и запятые в мои данные, которые я не хочу. Это, по-видимому, выполняется с помощью файла («weather_data.csv»), но я не знаю, как отключить или обойти это.

Это мой код сейчас:

<?php 

// Save received data into variables: 
$temperature = $_GET["t"]; 
$airHumidity = $_GET["ha"]; 
$soilHumidity = $_GET["hs"]; 
$light  = $_GET["l"]; 
$windDir  = $_GET["wd"]; 
$windSpeed = $_GET["ws"]; 
$rain   = $_GET["r"]; 

// Arrays for the column descriptor (first line in the csv-file) and the recent data: 
$columnDescriptor = array("Date","Time","Temperature","Air Humidity","Soil Humidity","Light","Wind Direction","Wind Speed","Rain"); 
$recentData  = array(date("Y-m-d"),date("H:i:s"),$temperature,$airHumidity,$soilHumidity,$light,$windDir,$windSpeed,$rain); 

$fileContents = file("weather_data.csv"); 
array_shift($fileContents); // removes first field of $fileContents 

$file = fopen("weather_data.csv","w"); 

fputcsv($file,$columnDescriptor); 
fputcsv($file,$recentData); 
fputcsv($file,$fileContents); 

fclose($file); 

?> 
+0

, похоже, у вас есть некоторые проблемы с логикой коды. как вы можете видеть, первая строка не имеет проблем, она начинает ставить котировки только после второй строки. – mavili

ответ

0

$ fileContents читается как массив строк, одна запись в строке файла CSV, но фактические данные CSV не анализируется. Последний fputcsv пытается записать эти данные в виде CSV и ускользнуть от него (добавление котировок и прочее). Вам нужно добавить старое содержимое файла ($ fileContents) в файл с fwrite вместо fputcsv:

fwrite($file, implode("\n", $fileContents)); 
+0

Также используйте '$ fileContents = file (" weather_data.csv ", FILE_IGNORE_NEW_LINES); вместо этого в файл не будут добавлены пустые строки. – Smuuf

+0

Хорошая точка! Или измените 'implode' на' implode ($ fileContents) ' – wldsvc

 Смежные вопросы

  • Нет связанных вопросов^_^