Problem beim auslesen von Dateien

grasman

Mitglied
Hi!

Ich habe ein Problem beim auslesen von einer Textdatei,
Die Daten in der Textdatei sehen ungefähr so aus:
Code:
"0";"dername";"email";
"1";"name";"email";
"2";"%!(&§§"%;;="(&$";"email";
jede Zeile ist ein Benutzer und enthällt verschiedene Infos über ihn.

Das Problem ist folgendes: manche Benutzernamen enthalten ein Semikolon, also genau dass Zeichen, welches als String-Seperator genutzt wird. Ich kann also nicht einfach mit explode die Datei auseinandernehmen, weil sonst sobald ein User ein Semikolon im Namen hat nichts mehr zusammenpasst.

Ich suche jetzt also konkret nach einer Möglichkeit, wie ich die Daten in ein Array laden kann wobei ein Semikolon innerhalb von Anführungsstrichen beim explode ignoriert werden soll.

Ich versuche das jetzt schon den ganzen Tag und komme einfach nicht auf die Lösung ich hoffe ihr könnt mir weiterhelfen.

Danke schonmal im Vorraus
mfg, grasman
 
versuch mal

$wert= explode("\";\"",$ZEILE);

Dann muß bei $wert[0] noch das erste " abgeschnitten werden und beim $wert[2] noch ";

MfG
 
Mit diesem Ausdruck passt das irgendwie garnichtmehr zusammen. Ich poste nochmal einen Abschnitt aus der originaldatei vielleicht ist es da besser zu erkennen, wo das problem liegt:
Code:
"43846";"chiefcommander";"alphabase";"[CULT]";"Sergeant";"87";
"43881";"ariel20";"atlantica";"]DON[";"Sergeant";"87";
"43883";"&&;%(sss)";"Orbit";"PuV";"Warrant-Officer";"87";
Ich habe hier mal den Problematischen Namen hervorgehoben und das Semikolon unterstrichen.
Vielleicht hilft es mir weiter wenn ich jede Zeile einzeln betrachte: Aber wie lese ich Zeile für Zeile einzeln aus einer Datei aus?
 
Also das einfachste ist eigentlich, daß du einen anderen Seperator nimmst, einen eindeutigern.
Dieser muss ja nicht aus einem Zeichen bestehen...
<<--||//-->> oder was weiß ich.
 
Ist warscheinlich wirklich besser den Seperator zu ändern.

Warumbei meinem Ausdruck álles durcheinander gerät ist mir aber unklar

Code:
<?

     $handle = fopen ("tutorials.txt", "r");
     $ausgabestring = "";
     while (!feof($handle))
       {
       $buffer = fgets($handle, 4096);
       $wert= explode("\";\"",$buffer);
       echo $wert[0]."<br>".$wert[1]."<br>".$wert[2]."<br>".$wert[3]."<br>".$wert[4]."<br>".$wert[5]."<br>";
       echo "<hr>";
       }
     fclose ($handle);

?>

ergibt bei mir

"43846
chiefcommander
alphabase
[CULT]
Sergeant
87";

--------------------------------------------------------------------------------
"43881
ariel20
atlantica
]DON[
Sergeant
87";

--------------------------------------------------------------------------------
"43883
&&;%(sss)
Orbit
PuV
Warrant-Officer
87";

Mf´G
 
Ah!

Vielen Dank an hondocrx für den Lösungsansatz!
So hats funktioniert (muss nur noch beim ersten ein " und beim letzten ein "; entfernen dann geht alles)
Ich schätze es hat bei mir nicht funktioniert weil ich keine While-Schleife fürs auslesen eingebaut habe. Ehrlich gesagt hab ich ja nicht sehr viel Ahnung von PHP ich bin nur froh dass es jetzt funktioniert :)

Den String-Seperator kann ich nicht ändern, weil es sich bei der Textdatei um eine öffentliche Datei eines Browsergames (http://www.droidwars.de) handelt, welche jeden Tag automatisch aktualisiert wird und Daten über alle (neuen und alten) Mitspieler enthällt.

Nochmal ein fettes Dankeschön für den fertigen Code :)

mfg, grasman

PS: wofür ist eigentlich diese Zeile:
Code:
$ausgabestring = "";
ist diese Zeile notwendig? Ist bestimmt aus versehen mit reingerutscht...
 
Zuletzt bearbeitet:
Zurück