# CSV importieren, zerhacken und ausgeben ;-)



## Fabian (24. Juli 2002)

Hallo Zusammen,

hab ein Problem..

Ich hab ne Datei 'sponsoren.csv', die sieht so aus (bsp.):


> Email;Firmenname;Status
> 
> email@1.de;Firma1;nein
> email@2.de;Firma2;ja
> email@3.de;Firma3;na



So, ich habe eine Tabelle:



> <table width="600" border="0" cellspacing="0" cellpadding="0">
> <tr>
> <td width="200"><div align="center">FIRMENNAME</div></td>
> <td width="200"><div align="center">EMAIL</div></td>
> ...



Ich oeffne also die Datei 'sponsoren.csv' wie folgt:

```
<?php
$fp = fopen ("sponsoren.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) { 
    $num = count ($data);
    for ($c=0; $c<$num; $c++) {
        echo $data[$c];
	}
}
fclose ($fp);
?>
```

Bei diesem Code wird dann folgendes ausgegeben:



> email@1.deFirma1neinemail@2.deFirma2jaemail@3.deFirma3na



So, wie ihr oben bei der Tabelle gesehen hab, will ich das Unterteilen.. Also in die Tabelle oben einfuegen!

Wie geht das? :[

Wenn Ihr das hinbekomm, gleich noch ne zusatzfrage ;-)

Kann man drei Tabellen machen, also Status OK, Status NO und Status NA ? 

Hoffe ihr versteht 

Bitte um hilfe, greets axess


----------



## THE REAL TOOLKIT (24. Juli 2002)

so?
echo $data[$c]\n;


----------



## Dario Linsky (24. Juli 2002)

http://www.php.net -> explode


----------



## Fabian (24. Juli 2002)

Mal testen..

Und haste auchn Tipp wie das geht mit den 3 verschiedenen Tabellen - je nach Status? 

Bye


----------



## Fabian (24. Juli 2002)

OK, nochmal anschaulich, zur Zeit sieht es so aus:

http://www.x-s.biz/hilfe/falsch.php

So soll es aber aussehen:

http://www.x-s.biz/hilfe/richtig.php

HELP PLEASE ;(


----------



## Dario Linsky (24. Juli 2002)

erzeug dir halt einfach drei weitere arrays - eins für yes, eins für no und eins für n/a. wenn du mit explode eine zeile aus der datei aufgeteilt hast, kannst du einfach das letzte element überprüfen und die gesamte zeile in das entsprechende array schreiben.
zum schluss gibst du einfach noch für jedes der drei arrays eine tabelle aus.


----------



## Fabian (25. Juli 2002)

"einfach" 

ich bekomm das schon mit dem explode net gescheit hin.. :\


----------



## THE REAL TOOLKIT (25. Juli 2002)

und wo ist das problem


----------



## Fabian (25. Juli 2002)

Ich weis einfach net wie ich das in dieses 'Script' einbinden muss:

```
<?php
$fp = fopen ("sponsoren.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) { 
    $num = count ($data);
    for ($c=0; $c<$num; $c++) {
        echo $data[$c];
    }
}
fclose ($fp);
?>
```

Es soll ja am Schluss die Tabelle rauskommen :\


----------



## F.o.G. (25. Juli 2002)

das sieht etwas kryptisch aus, bei Bedarf erkläre ich es:


```
<?php
function csvEcho($type) {
	$e = "email_";
	$f = "firma_";
	global ${$e.$type}, ${$f.$type};
	for($c = 0; $c <= count(${$e.$type}); $c++) {
		echo ${$e.$type}[$c];
		echo ${$f.$type}[$c];
	}
}

$fp = fopen ("sponsoren.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) { 
    $email = "email_".$data[2];
	$firma = "firma_".$data[2];
	${$email}[] = $data[0];
    ${$firma}[] = $data[1];
}
fclose ($fp);

csvEcho('na');
echo "<br>";
csvEcho('ja');
echo "<br>";
csvEcho('nein');
?>
```

einfach csvEcho() mit dem gewünschten Status angeben so wie im Beispiel. Wenn du in die Funktion noch HTML Code einbaust, spuckt dir die Funktion auch eine ganze Tabelle aus. Probier es aus, ich kann das ganze noch kommentieren. 

wenn du dich entscheidest auch noch 'vielleicht' als Möglichkeit anzugeben, dann steht das auch sofort zur Verfügung. Einfach csvEcho('vielleicht'); angeben.

Übrigens: das $$Var_name bedeutet das der Inhalt der Varibalen $Var_name als Name für eine Variable genommen wird. 

Also quasi so:

```
$test = "hello";
$hello = "hehehe, das kommt bei raus";

echo $$test; // es wird 'hehehe, das kommt bei raus' ausgegeben
```

das ist das Konzept dynamischer Variablen.

Ciao, F.o.G.


----------



## Dario Linsky (25. Juli 2002)

```
<?php

$fp = fopen ("./sponsoren.csv", "r");
while ($zeile = fgets ($fp, 1000))
{
    $arr = explode ($zeile, ";");
    switch ($arr[count($arr)])
    {
        case "ja": $arr_yes[count($arr_yes) + 1] = $arr; break;
        case "nein": $arr_no[count($arr_no) + 1] = $arr; break;
        case "na": $arr_na[count($arr_na) + 1] = $arr; break;
    }
}
fclose ($fp);

// und hier eben noch die einzelnen tabellen ausgeben

?>
```

ohne gewähr.


----------



## Fabian (25. Juli 2002)

Oh leck, is ja abnormal -g- Vielen Dank!

Jetzt hab ich nur das Problem mit der Tabelle -lol-.. :[


----------



## F.o.G. (25. Juli 2002)

```
function csvEcho($type) {
    $e = "email_";
    $f = "firma_";
    global ${$e.$type}, ${$f.$type};

    echo '<table width="600" border="0" cellspacing="0" cellpadding="0">'; 
    echo '<tr>';
    for($c = 0; $c <= count(${$e.$type}); $c++) {
        
        echo '<td width="200"><div align="center">'.${$e.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.${$f.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.$type.'</div></td>';
    }
    echo '</tr>';
    echo '</table>';
}
```


----------



## Fabian (25. Juli 2002)

http://www.x-s.biz/hilfe/fog.php

Irgedwie stimmt das net..

Das is der PHP Code:


```
<?php
function csvEcho($type) {
    $e = "email_";
    $f = "firma_";
    global ${$e.$type}, ${$f.$type};

    echo '<table width="600" border="0" cellspacing="0" cellpadding="0">'; 
    echo '<tr>';
    for($c = 0; $c <= count(${$e.$type}); $c++) {
        
        echo '<td width="200"><div align="center">'.${$e.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.${$f.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.$type.'</div></td>';
    }
    echo '</tr>';
    echo '</table>';
}

$fp = fopen ("sponsoren.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) { 
    $email = "email_".$data[2];
    $firma = "firma_".$data[2];
    ${$email}[] = $data[0];
    ${$firma}[] = $data[1];
}
fclose ($fp);

csvEcho('na');
echo "<br>";
csvEcho('ja');
echo "<br>";
csvEcho('nein');
?>
```


----------



## F.o.G. (25. Juli 2002)

Hehe ups.... die Schleife in der Funktion zählt zu weit und die Zeile <tr> muss natürlich in die Schleife:


```
function csvEcho($type) {
    $e = "email_";
    $f = "firma_";
    global ${$e.$type}, ${$f.$type};

    echo '<table width="600" border="0" cellspacing="0" cellpadding="0">'; 
    
    for($c = 0; $c < count(${$e.$type}); $c++) {
        echo '<tr>';
        echo '<td width="200"><div align="center">'.${$e.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.${$f.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.$type.'</div></td>';
		echo '</tr>';
    }
    
    echo '</table>';
}
```

sorry. 
Ciao F.o.G.


----------



## Fabian (25. Juli 2002)

OK, es geht! Vielen Dank! 

Gibts noch ne 'einfache' Moeglichkeit ueber jede Tabelle drueber zu schreiben was es ist? Z.B. - OK - / - Keine Antwort - etc.

(argl muss ich nerven)


----------



## F.o.G. (25. Juli 2002)

hmm, auf die schnelle würde folgendes gehen (wenn noch mehr reinkommen soll, musst du dir was anderes überlegen): erhöhe die Parameterzahl der csvEcho() Funktion:


```
function csvEcho($type, $title) {
   ....
   echo '<table width="600" border="0" cellspacing="0" cellpadding="0">';
   echo '<tr><td colspan="3" align="center">'.$title.'</td></tr>';
   ....
}

....

csvEcho('na', 'Titel');
```

Das 'müsste' gehen. 

Ciao, F.o.G.


----------



## Fabian (25. Juli 2002)

Hoi, vielen vielen Dank nochmals fuer die viele Hilfe 

Ich habs nach langen hin und her - auf die 'einfache' art gemacht:


```
echo "<center><b><font id=\"white\">- Zugesagt - </font></b><br><br>";
echo $tabelle;
csvEcho('ok');
echo "<br><br>";
echo "<center><b><font id=\"white\">- Abgesagt - </font></b><br><br>";
echo $tabelle;
csvEcho('no');
echo "<br><br>";
echo "<center><b><font id=\"white\">- Keine Antwort - </font></b><br><br>";
echo $tabelle;
csvEcho('ka');
echo "<br>";
```


```
<?php $tabelle = "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"borderall\">
            <tr> 
              <td width=\"200\" class=\"borderall\"><div align=\"center\"><strong>Kontaktmail</strong></div></td>
              <td width=\"200\" class=\"borderall\"><div align=\"center\"><strong>Firma</strong></div></td>
              <td width=\"200\" class=\"borderall\"><div align=\"center\"><strong>Status</strong></div></td>
            </tr>
          </table>"?>
```

Mhh, das Teil wuerde ja nicht gehen, wenns noch ne vierte spalte gaebe, oder? (z.B. email;firma;status;web)..?!


----------



## F.o.G. (25. Juli 2002)

Das dürfte nicht so schwer sein 


```
<?
function csvEcho($type) {
    $e = "email_";
    $f = "firma_";
    $w = "web_";
    global ${$e.$type}, ${$f.$type}, ${$w.$type};

    echo '<table width="600" border="0" cellspacing="0" cellpadding="0">'; 
    
    for($c = 0; $c < count(${$e.$type}); $c++) {
        echo '<tr>';
        echo '<td width="200"><div align="center">'.${$e.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.${$f.$type}[$c].'</div></td>';
        echo '<td width="200"><div align="center">'.$type.'</div></td>';
        echo '<td width="200"><div align="center">'.${$w.$type}[$c].'</div></td>';
        echo '</tr>';
    }
    
    echo '</table>';
}

$fp = fopen ("sponsoren.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) { 
    $email = "email_".$data[2];
    $firma = "firma_".$data[2];
    $web   = "web_".$data[2];
    ${$email}[] = $data[0];
    ${$firma}[] = $data[1];
    ${$web}[]   = $data[3];
}
fclose ($fp);

csvEcho('na');
echo "<br>";
csvEcho('ja');
echo "<br>";
csvEcho('nein');
?>
```

das müsste gehen.
So kannst du das selber erweitern.

Ciao, F.o.G.


----------



## Fabian (25. Juli 2002)

Ich liebe dich! %)

Danke Danke Danke!


----------



## paddi (13. April 2006)

Hallo,

ich habe ein ähnliches Problem mit dem auslesen einer CSV Datei.


```
XEUR-ARR;;300;300;@Littelfuse;littelfuse;LITTELFUSE;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;;;;;;045103.5MR;@RNC 0141;RNC 0141;RNC 0141;EMPTY;20151520;EMPTY;;Z1-92;Z1-92 Unidentif CC empty;200512;EMPTY;;ARASFAK749510;1;20051223;205;EUR;205;MISSING
XEUR-ARR;;102;102;@AVX;avx;AVX;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;;;;;;08055C104;@AX01000049;AX01000049;08055C104;EMPTY;20030550;EMPTY;;Z1-92;Z1-92 Unidentif CC empty;200512;EMPTY;;7710015/4873421;6;20051209;65;EUR;65;MISSING
XEUR-ARR;;397;397;@Molex;molex;MOLEX;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;BLKCOD;;;;;;;70543-0015;@AX05000057;AX05000057;AX05000057;EMPTY;22454360;EMPTY;;Z1-92;Z1-92 Unidentif CC empty;200512;EMPTY;;7719580/4872233;7;20051212;17;EUR;17;MISSING
```
so sieht eine csv datei von mir aus. ich brächte jetzt ein script bzw ich habe probiert dieses hier zu erweitern, dass es mir egal wieviel spalten in der csv sind eine tabelle macht und alle spalten korrekt ausgibt. aber ich komme einfach nicht weiter 
das problem ist halt das ich die spalten anzahl nicht fest machen kann. da es mal 23 spalten sind mal mehr mal weniger. könnte mir einer da weiterhelfen?ich habe echt 0 Ahnung wie ich das Script von oben umschreiben soll 

mfg


----------

