WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   dateien zeilenweise einlesen mit php (http://www.wcm.at/forum/showthread.php?t=106950)

spunz 28.08.2003 10:51

dateien zeilenweise einlesen mit php
 
ich will einige text files zeilenweise einlesen, mit php ja kein problem. gibt es nun aber eine einfache möglichkeit dazwischen bestimmte aktionen durchzufürhen? (zb zeilenumbruch oder sonderzeichen im code einbauen)

zb: zeile1 einlesen => "
" einbauen => zeile2 einlesen

snowman 28.08.2003 20:03

du kannst die datei in einen array einlesen:


$dateiarray = file ('http://www.domain.com/file.txt');

foreach ($dateiarray as $zeile) {
echo htmlspecialchars($zeile) . "
\n";


gruss,
snowman

käptn 28.08.2003 20:09

Wenn du deinen Speicher nicht irrtümlich mit einer großen Datei zumüllen willst solltest du file() nicht verwenden.

Folgendes geht davon aus, dass du wirklich immer nur eine Zeile brauchst:

PHP-Code:

$fh fopen($path'r');
while (!
feof($fh)){
  
$buff fgets($fh);
  
// irgendwas mit $buff anstellen
}
fclose($fh); 

Das hilft aber auch nichts, wenn in der Datei zig MB in nur einer Zeile stehen... :)

~

Irmi 28.08.2003 22:34

Zitat:

Das hilft aber auch nichts, wenn in der Datei zig MB in nur einer Zeile stehen...

Daher gibt's bei fgets auch einen 2. Parameter, wo man die max. Buffersize angibt ;)

Nur so als Ergänzung:
In einem File gibt es eigentlich gar keine Zeilen, das wurde nur bei Textfiles zum einfacheren Verständnis eingeführt, genauso wie der Textmodus. In Wirklichkeit ist ein File binär aufgebaut und Zeilen sind nichts anderes als \r\n.
Wenn jemand ein 10MB TIF-File öffnet und mit fgets einliest ohne den 2. Parameter, dann ist die Wahrscheinlichkeit sehr hoch, dass 10MB auf einmal eingelesen werden, da \r\n nicht zwingend vorkommen muss. Daher sollte man auf den 2. Parameter nicht verzichten :)

Who-T 29.08.2003 06:06

wobei - wenn ich mich nicht irre - noch hinzukommt, dass eine neue zeile auf unterschiedlichen systemen anders definiert ist


unix: \n
windows: \n\r (oder \r\n weiß ich net)
mac: ich glaub nur \r

spunz 29.08.2003 07:51

problem: der php code kann leider nicht verwendet werden, der text soll ich ein java script eingebaut werden. leider funktioniert das script nicht wenn der php code zum einlesen eingebaut wird (zb mit nem einfachen <?PHP readfile("fertig.txt"); ?> ) daten mit javascript einlesen scheint zumindest laut selfhtml nicht wirklich gut zu funktionieren, gibts noch andere alternativen?

PHP-Code:

<SCRIPT LANGUAGE="JavaScript1.2" SRC="graph.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
if(parseInt(navigator.appVersion) >= 4) {
var p = new Graph(200,200);
p.scale = 3000;
p.yLabel = "Bytes";
p.xLabel = "Datum";
p.setXScale("",1);
p.setDate(8,27,2003);
p.setLegend("SVNL01","SVWIEN01","SVGRAZ01");
p.addRow( 100

[b]hier soll die textdatei reinkommen[/b] 

 );
p.build();

} else {
  document.writeln("<IMG ALT=\"Upgrade to Communicator!\" SRC=\"exb3.gif\">");
}
</SCRIPT> 


snowman 29.08.2003 10:22

probier mal das einlesen via php vor dem javascript zu machen und nur die im variable im javascript zu parsen.

oder:
http://at.php.net/manual/en/ref.image.php

gruss,
snowman

käptn 29.08.2003 12:04

Zitat:

Original geschrieben von Irmi
Daher gibt's bei fgets auch einen 2. Parameter, wo man die max. Buffersize angibt ;)
Stimmt :)
Zitat:

Nur so als Ergänzung:
In einem File gibt es eigentlich gar keine Zeilen, das wurde nur bei Textfiles zum einfacheren
...
da \r\n nicht zwingend vorkommen muss. Daher sollte man auf den 2. Parameter nicht verzichten :)

Stimmt auch. :)

Er schrieb aber explitzit Textdateien, deshalb auch mein Vorschlag mit fgets() ohne zweiten Parameter.


@spunz

Code:

<script>
var Zeilen = new Array();
<?php
$i = 0;
$fh = fopen($path, 'r');
while (!feof($fh)){
  printf('Zeilen[%u] = "%s";', $i++,
    str_replace('"', '\"',
      preg_replace('/(\n\r|\r|\n){1}/', '\\n',
        fgets($fh)
      )
    )
  );
  echo "\n";
}
fclose($fh);
?>
</script>

~

Irmi 29.08.2003 13:05

@Käptn:

Zitat:

Er schrieb aber explitzit Textdateien, deshalb auch mein Vorschlag mit fgets() ohne zweiten Parameter.
Ja, ich wollte Dir damit auch nicht zu nahe treten :)
Sollte nur eine Ergänzung sein...

käptn 29.08.2003 13:18

Kein Problem, hab' ich auch nicht so empfunden.

Wahrscheinlich halte ich mich immer zu kurz. :)

~


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag