Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Стандартная работа с CSV файлами на PHP

Часто возникает задача, переноса Excel таблиц на Web-страницы сайта. На первый взгляд нет ничего проще, - достаточно сохранить файл из Excel в формате html. Но при ближайшем рассмотрении получившигося монстра приходишь в ужас и отказываешься от подобной идеи. Поэтому для переноса Excel-таблиц на сайт, их предварительно сохраняют как CSV-файл, который разбирают и динамически формируют HTML-таблицу. Так как CSV-файлы, всё-таки генерирует Excel, этот формат тоже не проблемный. Ячейки разделяются точкой с запятой и их нужно различать от точек с запятой, которые входят в состав текста ячейки. Сама ячейка, содержащая текстовые данные, обрамлена двойными кавычками, если в ячейке встречается символ двойных кавычек - они удваиваются.


<?php
$f 
fopen("file.csv""rt") or die("Ошибка!");
for (
$i=0$data=fgetcsv($f,1000,";"); $i++) {
  
$num count($data);
  echo 
"<h3>Строка номер $i (полей: $num):</h3>";
  for (
$c=0$c<$num$c++)
    print 
"[$c]: $data[$c]<br>"
}
fclose($f);
?>
Скопировать в буфер
Смотри также описание функции fgetcsv().

Класс работы с CSV файлами на PHP


<?php
class File_FGetCSV {
    var 
$VERSION "1.01";

    function 
fgetcsv($f$length$d=","$q='"') {
        
$list = array();
        
$st fgets($f$length);
        if (
$st === false || $st === null) return $st;
        if (
trim($st) === "") return array("");
        while (
$st !== "" && $st !== false) {
            if (
$st[0] !== $q) {
                
# Non-quoted.
                
list ($field) = explode($d$st2);
                
$st substr($ststrlen($field)+strlen($d));
            } else {
                
# Quoted field.
                
$st substr($st1);
                
$field "";
                while (
1) {
                    
# Find until finishing quote (EXCLUDING) or eol (including)
                    
preg_match("/^((?:[^$q]+|$q$q)*)/sx"$st$p);
                    
$part $p[1];
                    
$partlen strlen($part);
                    
$st substr($ststrlen($p[0]));
                    
$field .= str_replace($q.$q$q$part);
                    if (
strlen($st) && $st[0] === $q) {
                        
# Found finishing quote.
                        
list ($dummy) = explode($d$st2);
                        
$st substr($ststrlen($dummy)+strlen($d));
                        break;
                    } else {
                        
# No finishing quote - newline.
                        
$st fgets($f$length);
                    }
                }

            }
            
$list[] = $field;
        }
        return 
$list;
    }

    function 
fputcsv($f$list$d=","$q='"') {
        
$line ""
        foreach (
$list as $field) { 
            
# remove any windows new lines, 
            # as they interfere with the parsing at the other end 
            
$field str_replace("\r\n""\n"$field); 
            
# if a deliminator char, a double quote char or a newline 
            # are in the field, add quotes 
            
if(preg_match("/[$d$q\n\r]/"$field)) { 
                
$field $q.str_replace($q$q.$q$field).$q
            }
            
$line .= $field.$d
        }
        
# strip the last deliminator 
        
$line substr($line0, -1); 
        
# add the newline 
        
$line .= "\n"
        
# we don't care if the file pointer is invalid, 
        # let fputs take care of it 
        
return fputs($f$line); 
    }
}
?>
Скопировать в буфер

Аналог функции fgetcsv


<?php
function fgetcsv($f$length$d=","$q='"') {
        
$list = array();
        
$st fgets($f$length);
        if (
$st === false || $st === null) return $st;
        if (
trim($st) === "") return array("");
        while (
$st !== "" && $st !== false) {
            if (
$st[0] !== $q) {
                
# Non-quoted.
                
list ($field) = explode($d$st2);
                
$st substr($ststrlen($field)+strlen($d));
            } else {
                
# Quoted field.
                
$st substr($st1);
                
$field "";
                while (
1) {
                    
# Find until finishing quote (EXCLUDING) or eol (including)
                    
preg_match("/^((?:[^$q]+|$q$q)*)/sx"$st$p);
                    
$part $p[1];
                    
$partlen strlen($part);
                    
$st substr($ststrlen($p[0]));
                    
$field .= str_replace($q.$q$q$part);
                    if (
strlen($st) && $st[0] === $q) {
                        
# Found finishing quote.
                        
list ($dummy) = explode($d$st2);
                        
$st substr($ststrlen($dummy)+strlen($d));
                        break;
                    } else {
                        
# No finishing quote - newline.
                        
$st fgets($f$length);
                    }
                }

            }
            
$list[] = $field;
        }
        return 
$list;
    }
?>
Скопировать в буфер

Пример ручного разбора CSV на PHP


<?php
my $v 
'"aa\\";a\\\\";e;1;;m;9.2;';
my @a;
while (
$v =~ /"([^"\\]*(\\.[^"\\]*)*)";?|([^;]+);?|;/g) {
push (@adefined($1) ? $: $3);
}
push (@aundef) if $v =~ /;$/;
print @
a+0,"\n";
print 
"@a";
?>
Скопировать в буфер

Смотри также описание функции fgetcsv().

Новая услуга наших специалистов - продвижение сайтов в омске.

© Copyright 2008-2012 by KDG