phpbar.de logo

Mailinglisten-Archive

[php] externe Daten (.CSV) einbinden

[php] externe Daten (.CSV) einbinden

Thomas Feyrer Dante_(at)_altmuehlnet.de
Fri, 31 Dec 1999 16:16:54 +0100


--=====================_946649814==_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi Michael,

At 22:35 29.12.99 +0100, Michael Stahmann wrote:
>> Wenn ich z.B. in Excel in den einzelnen Datenfeldern ";" als Satzzeichen
>> verwende, werden diese Zeichen dann beim Speichern in das .csv-Format
>> escaped.
>> So z.B.
>> asdf;"as;df";asdf;"a;sdf"
>>
>
>Das ist mir neu, aber Prinzip hast Du Recht. Mein Kunde hat das Verbot f=FC=
r
>bestimmte Satzzeichen ausgesprochen bekommen.
>Ich habe es gerade nicht griffbereit, aber es gibt bei uns 5 Zeichen die
nicht
>verwendet werden d=FCrfen. Mit Suchen und Ersetzen ist das schnell gemacht.=
 Man
>kann sich ja ganz einfach auf andere Trennzeichen
>
>> Und deshalb d=FCrfte split in solchen F=E4llen sinnlos sein.
>
>Wenn sich jeder an die aufgestellten Regeln h=E4lt, dann klappt alles
>reibungslos. Und es gibt immer Regeln!

Diese Aussage gefiel mir ehrlich gesagt =FCberhaupt nicht!
Daher hab ich es mir zur Aufgabe gemacht einen CSV-Parser zu schreiben.
Und IMHO gibt es nun keine Zeichen die man nicht verwenden darf, wenn man
es in Excel als CSV-File abspeichert...
Nun gibt es nur noch eine kleine Regel, n=E4mlich, dass man die Excel-Tabell=
e
als "CSV" speichern muss.

Hab den Wrapper mal angeh=E4ngt, wer ihn brauchen kann, kann ihn hernehmen,
bitte meldet mir alle Fehler die ihr eventuell findet!

Bye
 Dante
--=====================_946649814==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="csv_wrapper.inc"

<?

/*

Author: Thomas Feyrer
Date:   31.12.1999
File:   csv_wrapper.inc

Example 1:
<?

include("csv_wrapper.inc");
$wrapper = new csv_wrapper("file.csv");

$cells = $wrapper->get_all_cells();
for($i=0,$n=count($cells);$i<$n;$i++) {
    for($e=0,$m=count($cells[$i]);$e<$m;$e++) {
        echo("($i|$e) -> ".$cells[$i][$e]."\n");
    }
}

?>

Example 2:
<?

include("csv_wrapper.inc");
$wrapper = new csv_wrapper();
$wrapper->open_file("file.csv");
$wrapper->parse_file();

$cells = $wrapper->get_all_cells();
for($i=0,$n=count($cells);$i<$n;$i++) {
    for($e=0,$m=count($cells[$i]);$e<$m;$e++) {
        echo("($i|$e) -> ".$cells[$i][$e]."\n");
    }
}

?>

Example 3:
<?

include("csv_wrapper.inc");
$wrapper = new csv_wrapper();
$wrapper->file[] = "My;line;which;should;be;parsed";
$wrapper->parse_file();

$cells = $wrapper->get_all_cells();
for($i=0,$n=count($cells);$i<$n;$i++) {
    for($e=0,$m=count($cells[$i]);$e<$m;$e++) {
        echo("($i|$e) -> ".$cells[$i][$e]."\n");
    }
}

?>

(c) Copyright 1999/2000 Thomas Feyrer

*/

class csv_wrapper {
    var $file;
    var $lines = array();
    var $cells = array(array());
    var $is_escaped = false;
    var $row = 0;
    var $col = 0;
        
    function csv_wrapper($file = '') {
        if($file) {
            $this->open_file($file);
            $this->parse_file();
        }
    }
    
    function open_file($file) {
        $this->file = $file;
        if($this->file) {
            if(!($this->lines = file($this->file))) return false;
        }
        for($i=0,$n=count($this->lines);$i<$n;$i++) $this->lines[$i] = ereg_replace("[\r\n]","",$this->lines[$i]);
    }
    
    function parse_file() {
        if(!$this->file) return false;
        for($i=0,$n=count($this->lines);$i<$n;$i++) {
            $this->row = $i;
            $work_line = $this->lines[$i];
            $this->col = 0;
            $this->is_escaped = false;
            $this->parse_line($work_line);
        }
    }
    
    function parse_line($line) {
        $first  = substr($line,0,1);
        $second = substr($line,1,1);
        if($first == '"') {
            if(!$this->is_escaped) {
                $this->is_escaped = true;
                $line = substr($line,1);
            } elseif($second == '"') {
                $line = substr($line,2);
                $this->cells[$this->row][$this->col] .= '"';
            } elseif($second == ';' || $second == '') {
                $this->is_escaped = false;
                $line = substr($line,2);
                $this->col++;
            }
        } elseif($first == ';') {
            if(!$this->is_escaped) {
                $line = substr($line,1);
                $this->col++;
                $this->is_escaped = false;
            } else {
                $this->cells[$this->row][$this->col] .= ";";
                $line = substr($line,1);
            }
        } elseif($line) {
            $this->cells[$this->row][$this->col] .= substr($line,0,1);
            $line = substr($line,1);
        } else {
            return false;
        }
        if(!$this->parse_line($line)) return false;
    }

    function get_all_cells() {
        return $this->cells;
    }
    
    function get_cell($row,$col) {
        return $this->cells[$row][$col];
    }
}

?>
--=====================_946649814==_
Content-Type: text/plain; charset="us-ascii"



--=====================_946649814==_--



php::bar PHP Wiki   -   Listenarchive