"We are back" « oc.at

PHP Array Frage (Poll - Script)

kurtm1 03.12.2005 - 14:35 762 9
Posts

nr1

Here to stay
Avatar
Registered: Dec 2003
Location: AT
Posts: 618
So also hier zu meinem Code:
Zuerst geht es darum aus einer Textdatei die so aufgebaut ist:

Zitat
Stand1:
1 //Zählerstand1
2 //Zählerstand2
3 //Zählerstand3

Die Werte zeilenweise in ein Array einzulesen, dies habe ich so gemacht:

Code: PHP
	
$text=file('questions.txt');
	for($i=0;$i<count($text);$i++)  
	$line[]=(int)$text[$i];

Weiters kommt folgende Prozedur, in der auf ein bestimmtes Ereignis reagiert wird, und die den dazugehörigen Zählerstand erhöht:
Code: PHP
switch ($q1)
{
case 1: $line[1]++; break;
case 2: $line[2]++; break;
case 3: $line[3]++; break;
}

Und jetzt kommt das Problem: Ich möchte die neuen Zählerwerte wieder im selbe Format (in jeder Zeile nur einen Zählerstand rausschreiben)
Bis jetzt mache ich folgendes:
Code: PHP
$file=fopen('questions.txt','w');	
for($i=0;$i<count($line);$i++) 
	fwrite($file,$line[$i],strlen($line[$i])+1);
fclose($file);
was zur Folge hat, dass zwar alle Werte wieder rausgeschrieben werden, jedoch alle in einer Zeile. Das heißt für mich, ich brauche zusätzlich einen „\n“ Tag. Nur wo bzw wie kann ich den zu jeder Zeile hinzufügen, wenn ich nur ein Integer Array habe?
Wenn ich das Array ganz normal als String Array lasse, kann ich die einzelnen Elemente nicht inkrementieren…

Bitte um Hilfe!

Frys_Assassin

information keeper
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
So rein ausm Stehgreif hätt ich gesagt:
Code: PHP
$file=fopen('questions.txt','w');    
for($i=0;$i<count($line);$i++)
    fwrite($file,$line[$i]."\n",strlen($line[$i])+1);
fclose($file);
Oder stören ihn da die unterschiedlichen Typen?

nr1

Here to stay
Avatar
Registered: Dec 2003
Location: AT
Posts: 618
ich hab das schon so wie in deinem Code dazugefügt, allerdings passiert dann nichts, weil das Array ja ein Integer Typ ist

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12142
Wie waer's mit Serialisierung?

nr1

Here to stay
Avatar
Registered: Dec 2003
Location: AT
Posts: 618
Zitat von COLOSSUS
Wie waer's mit Serialisierung?

keine ahnung wie das in php funzen sollte

Facetious

Addicted
Avatar
Registered: Oct 2003
Location: Wien
Posts: 406

nr1

Here to stay
Avatar
Registered: Dec 2003
Location: AT
Posts: 618
hmm ja das schaut zwar schön aus, aber ich kann mir nicht vorstellen, dass ich damit weiterkomme..

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25539
Code: PHP
$file=fopen('questions.txt','wt');     
for($i=0;$i<count($line);$i++)
{
    $newline = $line[$i]."\n\r";
    fwrite($file,$newline,strlen($newline)); 
}
fclose($file);
versuchs mal damit.. binaryfiles sind in php ein graus (auch wenn du von deinen posts her sowieso ein textfile willst :confused:). mit textmode gibts aber auch ein paar probleme. zB macht fwrite aus jedem \r\n (das eigentlich crlf in windows) ein \n\n.

wie auch immer, liegt wahrscheinlich auch an ein paar phpeinstellungen, vl ists ja auch ein bug.

wenn du allerdings kein (von dir) lesbares textfile brauchst, dann rate ich dir zu einem separator a la '|', einfach ein zeichen, dass du nicht verwenden wirst. dann kannst du das eingelesen file einfach explode()'en..

nr1

Here to stay
Avatar
Registered: Dec 2003
Location: AT
Posts: 618
habs inzwischen mit Hilfe von delphi-praxis.net geschafft

Code: PHP
$file = fopen('questions.txt', 'w');   
for ($i=0; $i < count($line); $i++)
{
    fwrite($file, $line[$i] . "\n", strlen($line[$i]) + 1);
}
fclose($file);

man muss nur aufpassen, weil der normale Editor die Datei falsch darstellt (keine zeilenumbrüche)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
dem geneigten coder werden die funktionen implode und explode nahegelegt...
http://www.php.net/implode
http://www.php.net/explode

übrigens: ohne file-locking ( zb flock() ) könnten zwei scripts gleichzeitig in die datei schreiben und so den inhalt korrumpieren.
Bearbeitet von atrox am 08.12.2005, 14:23
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz