Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: обработка csv

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Извлечение данных из csv и запись в mysql
ПлюмБум
Отправлено: 28 Сентября, 2011 - 08:56:57
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Помогите плиз! Есть программа, которая генерирует csv файл и добавляет в нем строки с интервалом 5 минут. Необходимо вывести через php последнее значение и записать его в mysql. Причем количество файлов 7, которые находятся на разных компьютерах.
Строка такого вида:
201109280954,0.000,0.000,0.000,37.000,32.000,25.300,24.200,746.280,...
Из этой строки нужны лишь 4 значения: 201109280954, 37.000, 25.300, 746.280


-----
Работает, не трогай!
 
 Top
ПлюмБум
Отправлено: 28 Сентября, 2011 - 14:26:03
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Вывод запись и обновление сделал, осталось только научить скрипт считывать только последнюю запись, а не все сразу. Подскажите хоть что-нибудь?
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $handle = fopen("dbase.csv", "r");
  3. $conn = mysql_connect ("localhost", "admin", "123456")
  4.     or die ("Соединение не установлено!");
  5. @mysql_select_db("oregon") or  die ("Соединение не установлено!");
  6. echo "<META HTTP-EQUIV='Refresh' CONTENT='300; URL=ore.php'>";
  7. while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  8.    $num = count($data);
  9.    echo "<p> $num полей в строке $row: <br /></p>\n";
  10.    $row++;
  11.        
  12.     for ($c=100; $c < $num; $c++)       {
  13.                 echo "<td><center>".$data[4]."</center></td><td><center>".$data[6]."</center></td>
  14.                 <td><center>".$data[8]."</center></td>";
  15.                 $result = mysql_query("INSERT INTO serv_aes (date, temperature, humidity, pressure) values (NOW(), $data[4], $data[6], $data[8])");
  16.    }
  17. }
  18. echo "</tr></table>";
  19. fclose($handle);            
  20. ?>


-----
Работает, не трогай!
 
 Top
topy
Отправлено: 28 Сентября, 2011 - 14:33:18
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




может через explode?
PHP:
скопировать код в буфер обмена
  1.  
  2. $lines=file($_FILES['upldfile']['tmp_name']);
  3. foreach ($lines as $line) {
  4.         $string = explode(',', $line);
  5.         echo $string[0]."<br/>";
  6.         echo $string[1]."<br/>";
  7.         echo $string[2]."<br/>";
  8.         echo $string[3]."<br/>";
  9.         echo $string[4]."<br/>";
  10. //и т.д. или если знаете какой последний по счету то вызывайте его, если не знаете, то посчитайте кол-во элементов массива и соотв. выясните последний... Думаю сами справитесь, это не высшая математика
  11. }
  12.  

(Отредактировано автором: 28 Сентября, 2011 - 14:34:35)

 
 Top
ПлюмБум
Отправлено: 28 Сентября, 2011 - 20:06:59
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




А мой вариант можно до ума довести?


-----
Работает, не трогай!
 
 Top
DlTA
Отправлено: 28 Сентября, 2011 - 21:28:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




fgetcsv
там примерчик понятный
 
 Top
Vet
Отправлено: 28 Сентября, 2011 - 21:44:37
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




ПлюмБум пишет:
А мой вариант можно до ума довести?

PHP:
скопировать код в буфер обмена
  1. ...
  2. $file = file('file.csv'); //В массиве $file - строки файла
  3. $last_row = count($file) - 1; // Индекс "последней строки" в массиве $file
  4. $data = explode(',', $file[$last_row]); //В массиве $data элементы последней строки
  5. $result = mysql_query("INSERT INTO serv_aes (date, temperature, humidity, pressure) values (NOW(), $data[4], $data[6], $data[8])");
  6. ...

Примерно так...
 
 Top
ПлюмБум
Отправлено: 29 Сентября, 2011 - 08:55:01
Post Id



Новичок


Покинул форум
Сообщений всего: 28
Дата рег-ции: Сент. 2011  


Помог: 0 раз(а)




Vet пишет:
$file = file('file.csv'); //В массиве $file - строки файла
$last_row = count($file) - 1; // Индекс "последней строки" в массиве $file
$data = explode(',', $file[$last_row]); //В массиве $data элементы последней строки
$result = mysql_query("INSERT INTO serv_aes (date, temperature, humidity, pressure) values (NOW(), $data[4], $data[6], $data[8])");

Спасибо! Решено.

(Отредактировано автором: 29 Сентября, 2011 - 08:58:25)



-----
Работает, не трогай!
 
 Top
sergamers
Отправлено: 22 Февраля, 2012 - 21:12:02
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




Объясню синтаксис генерации csv файла из php

что в двойных ковычках-это 1 строчка
разделитель между срочками ;
тег переноса на новую строку \n
пример написания $str переменной из массива будет следующий
for($i=0;$i<n; $i++)
{
for($j=0;$j<N;$j++)
{
$str.='"'.$a[$i][$j].'";';
}
$str.="\n";
}
где n и N длинна вашего массива. так заполняется строчка для подготовки к генерации csv из php. Наглядно это выглядит так же как и то

$str='"Отправитель письма";"Получатель письма";"Дата исходящая";"Дата входящая";"Дата контроля";"Тип письма"'."\n";
Это проход 1 строчки ну и т.д

Предположим, что мы хотим вывести на download файл с именем rec.csv
пишем следующее

$filename = 'rec.csv';
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
echo $str; //нашь сформулированный запрос.

Здесь главное чтобы в php запрос лежал либо в чистом <body></body> либо в чистой странице с php тегом <?php ?>
иначе идет сохранение всей html страницы.

значится выглядит это так

for($i=0;$i<3; $i++)
{
for($j=0;$j<6;$j++)
{
$str.='"'.$a[$i][$j].'";';
}
$str.="\n";
}
$filename = 'rec.csv';
header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="'.$filename.'"');
echo $str;

Если интересно могу привести рабочий пример
 
 Top
apulchra
Отправлено: 21 Июня, 2012 - 11:24:24
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Для sergamer: а можно ли рабочий пример на основе моей задачи? Вот код:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8'); // Вывод заголовка с данными о кодировке страницы
  3. // Настройка локали
  4. setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');
  5. //Настройка подключения к БД
  6. $sdb_name = "localhost";
  7. $user_name = "db_user";
  8. $user_password = "db_pass";
  9. $db_name = "db";
  10. // соединение с сервером базы данных
  11. if (!$link = mysql_connect($sdb_name,$user_name,$user_password))
  12.  {
  13.     echo "<br>Не могу соединиться с сервером базы данных!<br>";
  14.     exit();
  15.  }
  16. // выбираем базу данных
  17. if (!mysql_select_db($db_name, $link))
  18. {
  19.     echo "<br>Не могу выбрать базу данных<br>";
  20.     exit();
  21. }
  22. // строка запроса
  23. $str_sql_query = "SELECT user_tasks.user_id,user_tasks.task_id, tasks.task_description, task_start_date, projects.project_name, contacts.contact_display_name FROM user_tasks, tasks, projects, contacts WHERE user_tasks.user_id IN (23, 26, 27, 29) AND tasks.task_id=user_tasks.task_id AND tasks.task_project=projects.project_id AND projects.project_status=3 AND contacts.contact_id=projects.project_owner;";
  24. // выполнение запроса
  25. if (!$result = mysql_query($str_sql_query, $link))
  26. {
  27.     echo "<br>Не могу выполнить запрос<br>";
  28.     exit();
  29. }
  30. //формируем $str
  31. while ($mas = mysql_fetch_row($result))
  32. {    
  33.         foreach ($mas as $field)
  34.        {
  35.               $str.='"'.$field.'";';
  36.        }  
  37.        $str.="\n";
  38. }
  39. //дальше Ваш код
  40. $filename = 'rec.csv';
  41. $handle = fopen($filename, 'w');
  42. fwrite($handle, $str);
  43. fclose($handle);
  44. header('Content-type: application/csv');
  45. header('Content-Disposition: attachment; filename="'.$filename.'"');
  46. readfile($filename);
  47. unlink($filename);
  48. mysql_close($link); // закрываем соединение с mysql
  49. ?>

Немного не понял, где должно быть <body></body> , и разумеется, при выполнении php загружается файл, содержащий html код. А нужно, собственно, чтобы загружался csv c результатом запроса
 
 Top
apulchra
Отправлено: 26 Июня, 2012 - 08:06:50
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Решил задачу на основе http://backnet[dot]ru/2011/12/13/pro[dot][dot][dot]-v-excel-iz-php/
Отдельным файлом прописал так:
PHP:
скопировать код в буфер обмена
  1.  
  2. header('Content-Type: text/html; charset=utf-8');
  3. // Настройка локали
  4. setlocale(LC_ALL, 'ru_RU.65001', 'rus_RUS.65001', 'Russian_Russia. 65001', 'russian');
  5. $sdb_name = "localhost";
  6. $user_name = "db_user";
  7. $user_password = "db_pass";
  8. $db_name = "db";
  9. // соединение с сервером базы данных
  10. if (!$link = mysql_connect($sdb_name,$user_name,$user_password))
  11.  {
  12.     echo "<br>Не могу соединиться с сервером базы данных!<br>";
  13.     exit();
  14.  }
  15. // выбираем базу данных
  16. if (!mysql_select_db($db_name, $link))
  17. {
  18.     echo "<br>Не могу выбрать базу данных<br>";
  19.     exit();
  20. }
  21. // строка запроса
  22. $str_sql_query = "SELECT user_tasks.user_id,user_tasks.task_id, tasks.task_description, task_start_date, projects.project_name, contacts.contact_display_name FROM user_tasks, tasks, projects, contacts WHERE user_tasks.user_id IN (23, 26, 27, 29) AND tasks.task_id=user_tasks.task_id AND tasks.task_project=projects.project_id AND projects.project_status=3 AND contacts.contact_id=projects.project_owner;";
  23. //$str_sql_query = "SELECT * FROM task_log ";
  24. // выполнение запроса
  25. if (!$result = mysql_query($str_sql_query, $link))
  26. {
  27.     echo "<br>Не могу выполнить запрос<br>";
  28.     exit();
  29. }
  30. // Код выгрузки
  31. //стандартный заголовок
  32.         header('Content-Type: application/vnd.ms-excel; charset=utf-8');
  33.         header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.csv");
  34.         header("Content-Transfer-Encoding: binary ");
  35. // заголовок таблицы (необходимо для дальнейшей обработки)
  36. echo "user_id|task_id|task_description|task_start_date|project_name|contact_display_name"."\n";
  37. while ($mas = mysql_fetch_row($result))
  38. {
  39.     foreach ($mas as $field)
  40.     {
  41.         echo "". $field . "|";
  42.     }
  43.     echo "\n";
  44. }
  45. // закрытие соединения с сервером базы данных
  46. mysql_close($link);
  47. ?>
  48.  


а в теле открываемой страницы сделал ссылку.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB