[PHP] CSV, 2e regel in array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Stalkert
  • Registratie: Januari 2001
  • Laatst online: 06-08 15:23
Middels PHP lees ik een csv bestand in wat ik later ‘parse’ naar een HTML tabel.

Het csv bestand ziet er als volgt uit:

code:
1
2
3
4
5
6
7
8
9
Date;Time (EST);Location;Description;Forecast;Previous
11/29/2002;6:00:00 AM;E-12;November Business Climate;-0,5;-0,4
11/29/2002;6:00:00 AM;E-12;November HICP y/y flash est;2,30%;2,30%
11/29/2002;5:00:00 AM;E-12;November HICP m/m flash est;0,00%;0,30%
11/29/2002;5:00:00 AM;E-12;November EC Business Sentiment;-11,2;-10
11/29/2002;5:00:00 AM;E-12;November EC Consumer Sentiment;-12,4;-12
11/29/2002;5:00:00 AM;E-12;November EC Economic Sentiment;98,6;98,9
11/29/2002;4:30:00 AM;UK;Oct Consumer Credit;1.9 bln sterling;2.0 bln sterling
11/29/2002;4:30:00 AM;UK;October M4 Lending final;n/f;12.8 bln


De bedoeling is dat de eerste regel een CSS stijl krijgt toegewezen die vet is en de regels daaronder krijgen weer een andere stijl.

De code die ik tot heb is:

code:
1
2
3
4
5
6
7
<?php
$pieces = array();
$filename = "file.csv";

$fp = fopen ($filename, "r");
$string = fgets($fp, 1024);
$pieces = explode(";",$string);


met de fgets functie neem ik de eerste regel van het bestand en parse ik dit in een Array.
Deze parse ik naar html met de volgende code:

code:
1
2
3
4
5
<?
while (list(, $piece) = each ($pieces)) {
echo "<td class=\"myform2\" height=\"15\">$piece</td>";
}
?>


Dit werkt allemaal goed.

De array is echter niet helemaal zoals ik hem wil hebben. Voor de kop van de tabel is bovenstaande code ok, maar onder de kop komen nog een X aantal rijen.

$string = fgets($fp, 1024); pakt de eerste regel van het csv bestand, maar hij moet bij de volgende loop array’s gaan maken van rijen 2 t/m eind.

Iemand een idee hoe ik dit kan doen ?

Acties:
  • 0 Henk 'm!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 16-09 20:14
Waarom maak je niet gewoon gebruik van de file functie www.php.net/file
Deze functie leest in 1 keer de file in een array en elk array element is dan automatisch 1 regel.

It’s nice to be important but it’s more important to be nice


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Waarom maak je niet gewoon gebruik van de fgetcsv functie www.php.net/fgetcsv
Deze functie doet precies wat jij wilt! ;)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Precies, want er komt meer kijken bij CSV dan alleen een (punt)komma gescheiden lijstje.. Wat dacht je van escapen van karakters, gequote strings etc...

fgetcsv doet dat allemaal voor je ;)

[ Voor 12% gewijzigd door Bosmonster op 11-12-2002 12:01 ]


Acties:
  • 0 Henk 'm!

  • Stalkert
  • Registratie: Januari 2001
  • Laatst online: 06-08 15:23
Het is gelukt dankzij jullie met de fgetcsv functie.

Ik wil jullie de code niet onthouden. Dus zie alhier

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php
$row = 1;
$fp = fopen ("Map1.csv","r");
?>

<html>
<head>
        <title>Toolshed - Trading Solutions</title>
</head>
<link rel="stylesheet" href="../toolshed.css" type="text/css">
<body marginwidth="0" marginheight="10" topmargin="5" leftmargin="0">
<div align="center">
  <table width=580>
    <tr>
      <td>
        <div class="mybold">Grafiek</div>
        <p>
        <table class="mytable2" cellspacing="2" cellpadding="2" width=580>
          <tr>

<?
    $data = fgetcsv ($fp, 1000, ";");
    $num = count ($data);
    $row++;
        for ($c=0; $c < ($num-1); $c++) {
                print "<td class=\"myform2\" height=\"15\">$data[$c]</td>";
        }
    print "</tr>";

    while ($data = fgetcsv ($fp, 1000, ";")) {
        print "<tr>";
        for ($c=0; $c < ($num-1); $c++) {
                print "<td height=\"25\"><div class=\"mytable2\">$data[$c]</div></td>";
        }
        print " </tr>";
        $row ++;
     }
?>

</table>
</td>
</tr>
</table>
<p><font color="#FFFFFF" face="Arial, Helvetica, sans-serif" size="2">Hier kan uiteraard een vaste tekst staan</font></p>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>
</div>
</body>
</html>

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

mooi :)

volgens mij wordt de variable $row niet gebruikt! :)

[ Voor 4% gewijzigd door thomaske op 11-12-2002 21:58 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."

Pagina: 1