Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод данных из файла .CSV
 
 автор: mpflash   (14.07.2006 в 19:51)   письмо автору
 
 

Есть некая программа, которая может выводить статистику из программы в файл по типу .CSV


---------------------------------full.csv----------------------------------------------
Period;Download;Upload;Sum
16.06.2006 23:00 - 16.06.2006 23:59;12910;8733;21643
17.06.2006 00:00 - 17.06.2006 00:59;927462;539814;1467276
17.06.2006 01:00 - 17.06.2006 01:59;2699411;210697;2910108
17.06.2006 02:00 - 17.06.2006 02:59;5945230;596591;6541821
17.06.2006 03:00 - 17.06.2006 03:59;4116;2595;6711
17.06.2006 10:00 - 17.06.2006 10:59;0;71196;71196
17.06.2006 11:00 - 17.06.2006 11:59;2253393;527579;2780972
17.06.2006 12:00 - 17.06.2006 12:59;11258019;4257591;15515610
17.06.2006 13:00 - 17.06.2006 13:59;5058182;3928669;8986851
....
..
-------------------------END-----------------------------------------------------------
при запуске страницы с этим кодом, в каталоге D:\SERVER\www\Bwmeter\ (www.mysite.ru/Bwmeter/) появляется файл full.csv

----------go.php-------------------------------
<?php
exec
('D:\\SOFT\\LAN\\BWMeter\\ExportStats.exe D:\\SOFT\\LAN\\BWMeter\\Data\\Full-Internet.sts D:\\SERVER\\www\\Bwmeter\\full.csv -Range:06061500-06071500'); 
?>
----------END----------------------------------
Что хочу:
1. Чтобы при запуске страницы go.php отобрадалось содержимое файла full.csv
2. Можно ли сделать чтобы это выглядело не в таком виде, а двоеточия были как разделители таблыцы да и вообще таблицой?
3. Очень хотелось бы, чтобы .....;12910;8733;21643 все три значения были поделены на 1024, и перед 3-мя последними цифрами была зяпятая, вот так: 12,234

Я в РНР пока новичек, и не знаю даже самого простого :(

Кто реально поможет, могу даже отблагодарить вэбманями, заранее спасибо всем программерам!

   
 
 автор: cheops   (14.07.2006 в 23:55)   письмо автору
 
   для: mpflash   (14.07.2006 в 19:51)
 

Читайте файл при помощи функции file(), которая представит его содержимое в виде массива, в котором каждой из строк будет соответствовать отдельный элемент массива
<?php
  $arr 
file($text);
?>

Затем в цикле обходите массив $arr, разбивая его по символу ;, сформируйте многомерный массив
<?php
  
foreach($arr as $line)
  {
    
$tmp explode(";",$line);
    
$temp[] = $tmp;
  }
  echo 
"<pre>";
  
print_r($temp);
  echo 
"</pre>";
?>

а с многомерным массивом $temp можете делать всё что захотите, в том числе и формировать таблицу.

   
 
 автор: mpflash   (15.07.2006 в 00:54)   письмо автору
 
   для: cheops   (14.07.2006 в 23:55)
 



    [1] => Array
        (
            [0] => 16.06.2006 23:00 - 16.06.2006 23:59
            [1] => 12910
            [2] => 8733
            [3] => 21643

        )

    [2] => Array
        (
            [0] => 17.06.2006 00:00 - 17.06.2006 00:59
            [1] => 927462
            [2] => 539814
            [3] => 1467276

        )


данные стали выводится в таком виде, а не таблицей

   
 
 автор: cheops   (15.07.2006 в 10:49)   письмо автору
 
   для: mpflash   (15.07.2006 в 00:54)
 

Это дамп двумерного массива $temp, если вы хотите создать HTML-таблицу можно поступить следующим образом
<?php
  
if(!empty($temp))
  {
     echo 
"<table border=1>";
     for(
$i 0$i count($temp); $i++)
     {
        echo 
"<tr>";
        for(
$j 0$j count($temp[$i]; $j++)) echo "<td>".$temp[$i][$j]."</td>";
        echo 
"</tr>";
     }
     echo 
"</table>";
  }
?>

   
 
 автор: mpflash   (15.07.2006 в 11:06)   письмо автору
 
   для: cheops   (15.07.2006 в 10:49)
 

Parse error: parse error, unexpected ';' in D:\SERVER\www\bwmeter\index.php on line 14 (for($j = 0; $j < count($temp[$i]; $j++)) echo "<td>".$temp[$i][$j]."</td>"; )

   
 
 автор: cheops   (15.07.2006 в 11:10)   письмо автору
 
   для: mpflash   (15.07.2006 в 11:06)
 

Есть такое дело, исправьте строку
for($j = 0; $j < count($temp[$i]; $j++)) echo "<td>".$temp[$i][$j]."</td>";

на
for($j = 0; $j < count($temp[$i]); $j++) echo "<td>".$temp[$i][$j]."</td>";

   
 
 автор: mpflash   (15.07.2006 в 11:30)   письмо автору
 
   для: cheops   (15.07.2006 в 11:10)
 

а теперь вообще пустая страница, даже HTML содержания нет, cheops, проверьте мыло!

   
 
 автор: cheops   (15.07.2006 в 13:45)   письмо автору
 
   для: mpflash   (15.07.2006 в 11:30)
 

У вас как точно скрипт выглядит? Я проверяю вот таким скриптом
<?php 
  $arr 
file("get.txt");
  foreach(
$arr as $line
  { 
    
$tmp explode(";",$line); 
    
$temp[] = $tmp
  } 
  if(!empty(
$temp)) 
  { 
     echo 
"<table border=1>"
     for(
$i 0$i count($temp); $i++) 
     { 
        echo 
"<tr>"
        for(
$j 0$j count($temp[$i]); $j++) echo "<td>".$temp[$i][$j]."</td>"
        echo 
"</tr>"
     } 
     echo 
"</table>"
  }
?>

у меня всё работает.

   
 
 автор: mpflash   (15.07.2006 в 20:21)   письмо автору
 
   для: cheops   (15.07.2006 в 13:45)
 

Спасибо огромное, все равботает замечательно, как бы теперь сделать чтобы значения в ячейках 2,3,4 делились на 1024 ?

Какой функцией посчитать сумму всех ячеек второго столба и вывести гденибудь после таблицы таблицы?

Все ячейцки строки я думаю для этого должны будут обрабатываться отдельно, да и к томуже мне еще каждой надо задать размер и стиль!

   
 
 автор: cheops   (15.07.2006 в 20:56)   письмо автору
 
   для: mpflash   (15.07.2006 в 20:21)
 

Можно следующим образом усовершенствовать скрипт
<?php  
  $arr 
file("get.txt"); 
  foreach(
$arr as $line)  
  {  
    
$tmp explode(";",$line);  
    
$temp[] = $tmp;  
  }  
  
$sum 0;
  if(!empty(
$temp))  
  {  
     echo 
"<table border=1>";  
     for(
$i 0$i count($temp); $i++)  
     {  
        echo 
"<tr align=right>";  
        for(
$j 0$j count($temp[$i]); $j++)
        {
          if(
$j >= && $j <=3) echo "<td>".sprintf("%01.2f",$temp[$i][$j]/1024)."</td>";
          else echo 
"<td>".$temp[$i][$j]."</td>";  
        }
        
$sum += $temp[$i][1];
        echo 
"</tr>";  
     }  
     echo 
"<tr align=right>";  
     for(
$j 0$j count($temp[0]); $j++)
     {
       if(
$j == 1) echo "<td>".sprintf("%01.2f",$sum/1024)."</td>";
       else echo 
"<td>&nbsp;</td>";
     }
     echo 
"</tr>";  
     echo 
"</table>";  
  } 
?>

   
 
 автор: mpflash   (15.07.2006 в 21:19)   письмо автору
 
   для: cheops   (15.07.2006 в 20:56)
 

Тройное спасибо

теперь:

как в начале документа указать IP адреса, котором будут соответствовать определенные тексты в этой строке

exec('D:\\SOFT\\LAN\\BWMeter\\ExportStats.exe D:\\SOFT\\LAN\\BWMeter\\Data\\Full-Internet.sts D:\\SERVER\\www\\Bwmeter\\full.csv -Range:06051500-06081500'); 


вместо жирного

Можно ли по МАКУ ?

Кстати теперь это выглядит вот так http://www.aroundfox.net/bwmeter/

Да, можно ли первую строку вообще стереть, или хотябы чтобы в ней не производилось деление...

   
 
 автор: cheops   (16.07.2006 в 00:12)   письмо автору
 
   для: mpflash   (15.07.2006 в 21:19)
 

А что за программа ExportStats.exe и что она делает?

   
 
 автор: mpflash   (16.07.2006 в 00:15)   письмо автору
 
   для: cheops   (16.07.2006 в 00:12)
 

это Плагин к BWMERTER для экспорта статистики из своего формата в файл по типу .CSV

каждый пользователь имеет свои фильтры, ограничения, правила и так далее, ну и для удобства каждому пользователю вывод статистики его пользования интернета!

   
 
 автор: mpflash   (16.07.2006 в 12:16)   письмо автору
 
   для: mpflash   (16.07.2006 в 00:15)
 

1. Как в начале документа указать IP адреса, котором будут соответствовать определенные тексты в этой строке

exec('D:\\SOFT\\LAN\\BWMeter\\ExportStats.exe D:\\SOFT\\LAN\\BWMeter\\Data\\Full-Internet.sts D:\\SERVER\\www\\Bwmeter\\full.csv -Range:06051500-06081500');  
вместо жирного

2. Можно ли по МАКУ ?

Кстати теперь это выглядит вот так http://www.aroundfox.net/bwmeter/

3. Да, можно ли первую строку в генерируемой таблице вообще какнибудь стереть, или хотябы чтобы в ней не производилось деление и выводился вбитый изначально текст...

   
 
 автор: cheops   (16.07.2006 в 12:37)   письмо автору
 
   для: mpflash   (16.07.2006 в 12:16)
 

Да первую строку можно стереть, если вместо цикла
<?php
  
for($i 0$i count($temp); $i++)  
?>

подставить
<?php
  
for($i 1$i count($temp); $i++)  
?>

   
 
 автор: cheops   (16.07.2006 в 12:38)   письмо автору
 
   для: mpflash   (16.07.2006 в 12:16)
 

2. Не понятно чей MAC-адрес хотите использовать? MAC-пользователя вам получить не удасться, так как MAC-адрес живёт лишь до ближайшего роутера, далее идёт только IP-адрес.

   
 
 автор: mpflash   (16.07.2006 в 12:41)   письмо автору
 
   для: cheops   (16.07.2006 в 12:38)
 

1. Ха, ну вообщето смотря какого роутера.
2. Роутеров нету, пару свичей токо :)
3. Так как, можно это реализовать ну хотябы для IP?

   
 
 автор: cheops   (16.07.2006 в 12:44)   письмо автору
 
   для: mpflash   (16.07.2006 в 12:41)
 

В любом случае вытащить MAC-адреса при помощи PHP-скорее всего не удасться... так как он работает на прикладном пртоколе и практически не взаимодействует с низкоуровневыми протоколами.

   
 
 автор: mpflash   (16.07.2006 в 12:56)   письмо автору
 
   для: cheops   (16.07.2006 в 12:44)
 

Ну достаточно и IP, так как привязать ПАРАМЕТР К IP


чтобы вместо жирного текста прописывалось значение которое соответствует определенному IP:



exec('D:\\SOFT\\LAN\\BWMeter\\ExportStats.exe D:\\SOFT\\LAN\\BWMeter\\Data\\Full-Internet.sts D:\\SERVER\\www\\Bwmeter\\full.csv -Range:06051500-06081500');


например привязать вставляемый текст соответственно:
192.168.0.3 = ("_kase(3)");
192.168.0.4 = ("_mat(4)");
192.168.0.5 = ("_dimas(5)");

   
 
 автор: cheops   (16.07.2006 в 13:04)   письмо автору
 
   для: mpflash   (16.07.2006 в 12:56)
 

Подставьте вместо жирного текста $_SERVER['REMOTE_ADDR'], т.е, например
exec('D:\\SOFT\\LAN\\BWMeter\\ExportStats.exe D:\\SOFT\\LAN\\BWMeter\\Data\\'.$_SERVER['REMOTE_ADDR'].' D:\\SERVER\\www\\Bwmeter\\full.csv -Range:06051500-06081500');

   
 
 автор: mpflash   (16.07.2006 в 13:17)   письмо автору
 
   для: cheops   (16.07.2006 в 13:04)
 

это немножко не то, продолжение темы в http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=20881&page=1

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования