PDA

Bekijk Volledige Versie : even hulp nodig voor while met fgets [PHP]



Matthijs de Z
16/04/03, 14:50
Hallo,

Ik moet een .csv file bewerken. De eerste regen moet (als het script klaar
is) een andere opmaak hebben dan de overige regels. Dus ik dacht, ik lees
eerst de eerste regel in en daarna met een while loop de rest. Helaas krijg
ik alleen de eerste regel goed te zien en de rest niet. Dit is het (basis)
script:

<?php
$fd = fopen ("/pad/naar/de/file.csv", "r");
$tekst = fgets($fd, 4096);
$plaatseerstecomma = strpos($tekst,",")+1;
$achtereerstecomma = substr($tekst,$plaatseerstecomma);
$vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
$totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";
echo "<table border=1>\n$totaalregel\n</tabel>";

echo "<table border=1>\n";
while (!feof($fd)):

$buffer = fgets($fd, 4096);
$buffer = trim($buffer);
$regel = "";

$regel = $buffer;

$plaatseerstecomma = strpos($regel,",")+1;
$achtereerstecomma = substr($regel,$plaatseerstecomma);
$vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
$totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";


endwhile;
fclose ($fd);
echo "\n</tabel>";
?>

===============
Dat geeft dit als bron:
===============
<table border=1>
<tr>
<td>Name</td>
<td>Close</td>
<td>MACD</td>
<td>MACD -1</td>
<td>MACD -2</td>
<td>MACD -3</td>
<td>TriggerLine</td>
<td>TriggerLine -1</td>
<td>TriggerLine -2</td>
<td>Triiger Line -3</td>
<td>St_FK</td>
<td>%K -1</td>
<td>%K -2</td>
<td>%K -3</td>
<td>St_FD</td>
<td>%D -1</td>
<td>%D -2</td>
<td>%D -3</td>
<td>HC</td>
<td>HC-1</td>
<td>LC</td>
<td>LC-1
</td>
</tr>
</tabel><table border=1>

</tabel>

==================
Als bron file gebruik ik dit (als voorbeeld slechts een paar regels)
==================

Symbol,Name,Close,MACD,MACD -1,MACD -2,MACD -3,TriggerLine,TriggerLine -1,Tr
iggerLine -2,Triiger
Line -3,St_FK,%K -1,%K -2,%K -3,St_FD,%D -1,%D -2,%D -3,HC,HC-1,LC,LC-1
1comp,NASDAQ
COMPOSITE,1356.74,-10.27,-10.58,-13.56,-15.74,12.37,12.96,13.02,12.96,0.19,1
4.86,55.81,62.14,27.02,47.77,65.13,77.60,1393.37,1 392.52,1356.60,1376.60
1dj-30,DJ 30
INDUSTRIAL,8197.94,-107.35,-118.34,-138.70,-149.31,70.04,68.96,65.86,62.62,0
..86,50.74,59.34,85.61,41.94,64.22,72.40,84.56,838 8.33,8342.83,8195.14,8260.4
8
33sx5p,DJ STOXX50
,2304.21,-84.62,-96.26,-105.36,-107.34,16.28,12.16,7.88,3.87,59.36,71.07,89.
52,90.31,75.64,83.76,88.80,86.24,2344.82,2341.03,2 263.97,2298.56

==========
om het even duidelijk te maken, zal ik er in deze postin even een regel
tussen zetten
==========

Symbol,Name,Close,MACD,MACD -1,MACD -2,MACD -3,TriggerLine,TriggerLine -1,Tr
iggerLine -2,Triiger
Line -3,St_FK,%K -1,%K -2,%K -3,St_FD,%D -1,%D -2,%D -3,HC,HC-1,LC,LC-1

1comp,NASDAQ
COMPOSITE,1356.74,-10.27,-10.58,-13.56,-15.74,12.37,12.96,13.02,12.96,0.19,1
4.86,55.81,62.14,27.02,47.77,65.13,77.60,1393.37,1 392.52,1356.60,1376.60

1dj-30,DJ 30
INDUSTRIAL,8197.94,-107.35,-118.34,-138.70,-149.31,70.04,68.96,65.86,62.62,0
..86,50.74,59.34,85.61,41.94,64.22,72.40,84.56,838 8.33,8342.83,8195.14,8260.4
8

33sx5p,DJ STOXX50
,2304.21,-84.62,-96.26,-105.36,-107.34,16.28,12.16,7.88,3.87,59.36,71.07,89.
52,90.31,75.64,83.76,88.80,86.24,2344.82,2341.03,2 263.97,2298.56

=====================
waarom pakt het script die fgets niet bij de while functie. Ik heb de file
nog niet gesloten en reeds 1 regel uitgelezen. Dan zou hij toch bij regel 2
moeten starten om verder te gaan?
Groeten,

Matthijs

Matthijs de Z
16/04/03, 15:20
Laat maar, ik heb het script opnieuw geschreven en nu werkt het wel. Ik zie
alleen even niet wat ik eerst fout deed, maar goed...het werkt.

<?php
$fd = fopen ("/pad/naar/de/file.csv", "r");


$tekst = fgets($fd, 4096);
$plaatseerstecomma = strpos($tekst,",")+1;
$achtereerstecomma = substr($tekst,$plaatseerstecomma);
$vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
$totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";


echo "<table border=1>\n$totaalregel\n";

while(!feof($fd)):

$buffer = fgets($fd, 4096);
$buffer = trim($buffer);
$regel = "";

$regel = $buffer;

$plaatseerstecomma = strpos($regel,",")+1;
$achtereerstecomma = substr($regel,$plaatseerstecomma);
$vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
$totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";

echo $totaalregel;

endwhile;
fclose ($fd);
echo "\n</tabel>";
?>






> Hallo,
>
> Ik moet een .csv file bewerken. De eerste regen moet (als het script klaar
> is) een andere opmaak hebben dan de overige regels. Dus ik dacht, ik lees
> eerst de eerste regel in en daarna met een while loop de rest. Helaas
krijg
> ik alleen de eerste regel goed te zien en de rest niet. Dit is het (basis)
> script:
>
> <?php
> $fd = fopen ("/pad/naar/de/file.csv", "r");
> $tekst = fgets($fd, 4096);
> $plaatseerstecomma = strpos($tekst,",")+1;
> $achtereerstecomma = substr($tekst,$plaatseerstecomma);
> $vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
> $totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";
> echo "<table border=1>\n$totaalregel\n</tabel>";
>
> echo "<table border=1>\n";
> while (!feof($fd)):
>
> $buffer = fgets($fd, 4096);
> $buffer = trim($buffer);
> $regel = "";
>
> $regel = $buffer;
>
> $plaatseerstecomma = strpos($regel,",")+1;
> $achtereerstecomma = substr($regel,$plaatseerstecomma);
> $vervangcommas = eregi_replace(",","</td>\n<td>",$achtereerstecomma);
> $totaalregel = "<tr>\n<td>$vervangcommas</td>\n</tr>";
>
>
> endwhile;
> fclose ($fd);
> echo "\n</tabel>";
> ?>
>
> ===============
> Dat geeft dit als bron:
> ===============
> <table border=1>
> <tr>
> <td>Name</td>
> <td>Close</td>
> <td>MACD</td>
> <td>MACD -1</td>
> <td>MACD -2</td>
> <td>MACD -3</td>
> <td>TriggerLine</td>
> <td>TriggerLine -1</td>
> <td>TriggerLine -2</td>
> <td>Triiger Line -3</td>
> <td>St_FK</td>
> <td>%K -1</td>
> <td>%K -2</td>
> <td>%K -3</td>
> <td>St_FD</td>
> <td>%D -1</td>
> <td>%D -2</td>
> <td>%D -3</td>
> <td>HC</td>
> <td>HC-1</td>
> <td>LC</td>
> <td>LC-1
> </td>
> </tr>
> </tabel><table border=1>
>
> </tabel>
>
> ==================
> Als bron file gebruik ik dit (als voorbeeld slechts een paar regels)
> ==================
>
>
Symbol,Name,Close,MACD,MACD -1,MACD -2,MACD -3,TriggerLine,TriggerLine -1,Tr
> iggerLine -2,Triiger
> Line -3,St_FK,%K -1,%K -2,%K -3,St_FD,%D -1,%D -2,%D -3,HC,HC-1,LC,LC-1
> 1comp,NASDAQ
>
COMPOSITE,1356.74,-10.27,-10.58,-13.56,-15.74,12.37,12.96,13.02,12.96,0.19,1
> 4.86,55.81,62.14,27.02,47.77,65.13,77.60,1393.37,1 392.52,1356.60,1376.60
> 1dj-30,DJ 30
>
INDUSTRIAL,8197.94,-107.35,-118.34,-138.70,-149.31,70.04,68.96,65.86,62.62,0
>
..86,50.74,59.34,85.61,41.94,64.22,72.40,84.56,838 8.33,8342.83,8195.14,8260.4
> 8
> 33sx5p,DJ STOXX50
>
,2304.21,-84.62,-96.26,-105.36,-107.34,16.28,12.16,7.88,3.87,59.36,71.07,89.
> 52,90.31,75.64,83.76,88.80,86.24,2344.82,2341.03,2 263.97,2298.56
>
> ==========
> om het even duidelijk te maken, zal ik er in deze postin even een regel
> tussen zetten
> ==========
>
>
Symbol,Name,Close,MACD,MACD -1,MACD -2,MACD -3,TriggerLine,TriggerLine -1,Tr
> iggerLine -2,Triiger
> Line -3,St_FK,%K -1,%K -2,%K -3,St_FD,%D -1,%D -2,%D -3,HC,HC-1,LC,LC-1
>
> 1comp,NASDAQ
>
COMPOSITE,1356.74,-10.27,-10.58,-13.56,-15.74,12.37,12.96,13.02,12.96,0.19,1
> 4.86,55.81,62.14,27.02,47.77,65.13,77.60,1393.37,1 392.52,1356.60,1376.60
>
> 1dj-30,DJ 30
>
INDUSTRIAL,8197.94,-107.35,-118.34,-138.70,-149.31,70.04,68.96,65.86,62.62,0
>
..86,50.74,59.34,85.61,41.94,64.22,72.40,84.56,838 8.33,8342.83,8195.14,8260.4
> 8
>
> 33sx5p,DJ STOXX50
>
,2304.21,-84.62,-96.26,-105.36,-107.34,16.28,12.16,7.88,3.87,59.36,71.07,89.
> 52,90.31,75.64,83.76,88.80,86.24,2344.82,2341.03,2 263.97,2298.56
>
> =====================
> waarom pakt het script die fgets niet bij de while functie. Ik heb de file
> nog niet gesloten en reeds 1 regel uitgelezen. Dan zou hij toch bij regel
2
> moeten starten om verder te gaan?
> Groeten,
>
> Matthijs
>
>