PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text aus datei auslesen.....



adminroot
30-01-2002, 16:55
hi. habe folgendes problem:

ich habe eine text datei, in der folgendes steht:

user1§user2§user3§...usw.

gespeichert wird das mit
$user = $user1."§".$user2."§".$user3."........usw;
fwrite($data,$user);

wenn ich es aus lese mache ich es so

$arr = explode("§",$text);

bis hier tuts alles.

da ich aber mehr als nur 3 user abspeichern will, und das in die text datei nur in einer zeile gespeichert wird, habe ich mir gedacht, ich speicher jeden user in einer zeile

$user = $user1."\n".$user2."\n".$user3."........usw;
fwrite($data,$user);

dann wird es auch so gespeichert:

user1
user2
user3
...usw


will ich dieses jetzt mit explode auslesen
$arr = explode("\n",$text);
findet er nur den ersten user.
so, als ob er das \n garnicht sehen könnte

gibt es ne andere möglichkeit?

Pingu
30-01-2002, 17:54
Hi,

das kommt natürlich auch sehr darauf an, wie du die text datei liest. also kenne zwei varianten:

1.


/// öffne Textdatei zum lesen
$fp = fopen("/user.txt", "r");

/// lese komplette Datei in Variable
$users = fread($fp, filesize("/user.txt"));

/// schließe Datei
fclose($fp);

/// konvertiere in user array
$users = explode("\n", $users);


1.b (das ganze entwas kürzer


$users = explode("\n", fread($fp = fopen("/user.txt", "r"), filesize("/user.txt")));
fclose($fp);


2. (da eh alle mit \n getrennt ist)


$users = file("/user.txt");


Gruß

-= Pingu =-

PS: selbst ein ganzes textfile einlesen läßt sich schön einfach:


$content = join("\n", file("/file.txt"));


Alles steht unter http://www.php.net/manual/de/ref.file.php

adminroot
30-01-2002, 18:29
so wie du das gesagt hast, ist das ja alles richtig, wenn man statt \n
irgend ein anderes zeichen einsetzt.
aber mit \n funzt das leider nicht

 HS
30-01-2002, 22:03
Hi,
kann es sein, das du nicht die ganze Datei einliest. Nur die erste Zeile?

ich habe folgendes ausprobiert:

///////////////////////////////////////
$u1="test1";
$u2="test2";
$u3="test3";

$u = $u1."\n".$u2."\n".$u3;

$a = explode("\n",$u);

echo $a[1];
///////////////////////////////////////

Es wird 'test2' ausgegeben.

Gruß
HS

Pingu
31-01-2002, 09:00
Hi, was funzt nicht??? >o)

Also bei all meinen aufgeführten Varianten ist $users jedes mal schon das Array.

Oder ist dies User datei auf einem Windowssystem erstellt, denn dann ist es nicht '\n' sondern '\r\n', oder auf einem Mac, denn dann ist es '\n\r' anstatt von '\n?.

Oder liest Du nur das erste Element, wie HS schon schrieb?

Oder liest Du gar nicht die ganze Datei ein?

Also mein Beispiel funzt so, wobei ich die 'file()'-Variante schöner finde, siehe http://www.php.net/manual/de/function.file.php Denn diese Variante liest alles schon in ein Array ein. Da darf man dann nicht nocheinmal 'explode()' machen.

Note: 'file()' geht aber nur bei Textdateien, ich habe letztens fast 3 Stunden zugebracht, um selber herauszufinden, was im Manual mit einer großen Note steht: File ist not binary safe. *grml*

Gruß

-= Pingu =-

adminroot
01-02-2002, 16:43
Also.... habe vergessen zu schreiben, daß es ein windows-2000-system ist.
habe mir jetzt so ein kleines prog geschrieben, aber leider wird nur test1 ausgegben:
ob ich \n\r
\r\n
oder nur \n
verwende:

<?php

$u1="test1";
$u2="test2";
$u3="test3";

$line = $u1."\n\r".$u2."\n\r".$u3;

$fd = fopen("data.dat", "w");
if (!$fd)
{
echo "<p>Öffnen der Anmeldedaten-Datei fehlgeschlagen !\n";
exit;
}
if (!fwrite($fd, $line, 4096))
{
echo "<p>Speichern der Anmeldedaten fehlgeschlagen !\n";
exit;
}
fclose($fd);


$fd = fopen("data.dat", "r");
if (!$fd)
{
echo "<p>Einlesen der Anmeldedaten fehlgeschlagen !\n";
exit;
}
$line = fgets($fd,40690);
fclose($fd);
$satz_all = explode("\n\r", $line);

echo $satz_all[0];
echo $satz_all[1];
echo $satz_all[2];
?>

probiert ihr dieses mal bitte aus
bin mir jetzt nicht sicher, was ich einlese

thx

 HS
01-02-2002, 17:35
Mit dem Script liest du nicht die ganze Datei ein.

/////////////////////////////////////////
<?php

$u1="test1";
$u2="test2";
$u3="test3";

$line = $u1."\n".$u2."\n".$u3;

$fd = fopen("data.dat", "w");
if (!$fd)
{
echo "<p>Öffnen der Anmeldedaten-Datei fehlgeschlagen !\n";
exit;
}
if (!fwrite($fd, $line, 1024))
{
echo "<p>Speichern der Anmeldedaten fehlgeschlagen !\n";
exit;
}
fclose($fd);


$fd = fopen("data.dat", "r");
if (!$fd)
{
echo "<p>Einlesen der Anmeldedaten fehlgeschlagen !\n";
exit;
}
$k=0;

//Ganze Datei einlesen
while(!feof($fd))
{
$zeile=fgets($fd, 1024);
$z[$k]=$zeile;
$k++;
}
fclose($fd);

echo $z[0];
echo $z[1];
echo $z[2];
?>
////////////////////////////////////////////////////

Jetzt wird die ganze Datei eingelesen.

Gruß
HS

Pingu
01-02-2002, 18:59
Hi,

RTFM

fgts() - liest nur bis die Anzahl ein Zeichen oder _EOL_ (End of Line) erreicht sind (ist).

D.h. fgets() liest schon zeilenweise ein.

mein beispiel oben bezieht sich die ganze zeit auf fread(), das bis EOF (End of File) liest.

-= Pingu =-

 HS
01-02-2002, 19:16
stimmt, wenn fread() die ganze Datei bis eof liest, ist es besser ;)

Gruß
HS