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

Форум PHP

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

 

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

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

тема: Открытие файла и считывание файла
 
 автор: Владимир55   (17.01.2013 в 22:45)   письмо автору
 
 

Для разбора CSV файла используем вот такой код:
     $row = 1;
    $handle = fopen("51.csv", "r");
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $num = count($data);
        echo "<p> $num полей в строке $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle); 

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

 $tmp = file_get_contents('51.csv'); 

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

Есть ли другой способ?

  Ответить  
 
 автор: cheops   (19.01.2013 в 10:01)   письмо автору
 
   для: Владимир55   (17.01.2013 в 22:45)
 

Если у вас PHP 5.3 можно воспользоваться функцией str_getcsv(), передав ей содержимое переменной $tmp.

  Ответить  
 
 автор: CrazyAngel   (19.01.2013 в 10:54)   письмо автору
 
   для: Владимир55   (17.01.2013 в 22:45)
 

Как выше уже сказали способ для 5.3 и больше. Если это не подходит, то можно записать в память, тем самым самому сделать такую функцию

<?php if (!function_exists('str_getcsv')) {
 
function 
str_getcsv($input$delimiter=','$enclosure='"'$escape=null$eol=null) {
  
$temp=fopen("php://memory""rw");
  
fwrite($temp$input);
  
fseek($temp0);
  
$r = array();
  while ((
$data fgetcsv($temp4096$delimiter$enclosure)) !== false) {
    
$r[] = $data;
  }
  
fclose($temp);
  return 
$r;
}
 
?> 


подробнее в мануале, как всегда

  Ответить  
Rambler's Top100
вверх

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