Mailinglisten-Archive |
--=====================_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