 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
14.10.2005, 15:21
|
#1
|
|
TP-Newbie
Registriert seit: Oct 2005
|
Gezieltes Auslesen bestimmter Werte aus einem Textfile?
Hallo zusammen.
Ich hoffe hier mal auf Eure Hilfe, da mir die Technik der Expressions einfach nicht in die Birne will. Ich habe das Problem, das ich ein vorliegendes Textfile auslesen will. Dabei sollen aus dem systematisch aufgebauten Quellfile nur bestimmte Teile herausgezogen werden, und via PHP im Browser in einer Tabelle neu ausgegeben werden. Da ich absoluter PHP Noob und auch sonst nur "Bastel und Probier - Coder" bin, wäre es toll wenn sich vielleicht jemand der Sache annehmen könnte.
Der Code funktioniert schon ganz toll, nur die Ausgabe ist nicht korrekt.
Im Quellfile sehen die Daten so aus:
Code:
[1] = {
["var1"] = " 20 ",
["var2"] = " Herr ",
["var3"] = " 1 ",
["var4"] = " Schmidt ",
["var5"] = " Wien ",
},
[2] = {
["var1"] = " 1 ",
["var2"] = " Frau ",
["var3"] = " 0 ",
["var4"] = " Müller ",
["var5"] = " Hannover ",
},
Der Code zum Auslesen und wieder ausgeben den ich derzeit benutze, funktioniert soweit generell. Hier zum Beispiel der Code, mit dem ich die laufende Nummer ausgeben lasse
Code:
preg_match("/.*]/",$value,$nr);
$nr[0]=preg_replace("/]/","",$nr[0]);
$name[$key]=$nick[0];
Was ich dann aber im Browser als Ergebnis bekomme ist das hier:
1 | "var1" | "var2" | "var3" | "var4" | "var5"
2 | "var1" | "var2" | "var3" | "var4" | "var5"
Wohin ich möchte ist aber eine Tabelle, in der Zeilenweise die Werte stehen, also:
1 | Wert von var1 | Wert von var2 | Wert von var3 | Wert von var4 |
2 | Wert von var2 | Wert von var2 | Wert von var3 | Wert von var4 |
und so weiter. Ich sehe den Fehler ganz klar bei den Expressions. Aber was mache ich falsch? Kennt einer ne gute Doku? Ich habe hier im Board in den Tutorials schon geguckt, und damit die Sache schon besser verstanden. Aber ich kriegs trotzdem nicht hin. Ich scheitere daran, die ganzen Gänsefüsschen abzufangen, die ich in der endgültigen Ausgabe ja nicht haben will - sondern nur das was dazwischen steht.
Ja und dann hab ich noch einen klitzekleinen Fehler beim Start des Einlesens der Quelldaten. Es gibt einen ersten "[" der mit "explode" abgefangen wird. Die dahinter stehenden Werte interessieren mich aber nicht. Ich möchte erst beim zweiten "[" anfangen, die Werte auszugeben. Wie binde ich sowas denn ein? Einfach einen Zähler davor?
|
|
|
14.10.2005, 15:36
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Bei dem Textfile würde ich ganz anders vorgehen.
Einfach den gesamten Text in ein String einlesen, und dann alle [ ersetzen durch z.B. $a[
Das Array kannst Du dann mit eval aktivieren
|
|
|
19.10.2005, 17:30
|
#3
|
|
TP-Newbie
Registriert seit: Oct 2005
|
hm ich hab versucht den tip zu kapieren und umzusetzen. bin über die gesamte bank erfolglos geblieben.
angenommen ich würde bei oben geschilderten php code bleiben - weiss da keiner wie man die expressions anpassen müsste? is das echt so kompliziert? ich dachte das liegt jetzt daran das ich php noob bin :-)
|
|
|
19.10.2005, 18:01
|
#4
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
bin zwar kein regexfreak, aber zu einem Ergebnis komme ich auch, wenn auch nicht in einer Zeile.
Hier mal eine Möglichkeit:
PHP-Code:
$r='[1] = {
["var1"] = " 20 ",
["var2"] = " Herr ",
["var3"] = " 1 ",
["var4"] = " Schmidt ",
["var5"] = " Wien ",
},
[2] = {
["var1"] = " 1 ",
["var2"] = " Frau ",
["var3"] = " 0 ",
["var4"] = " Müller ",
["var5"] = " Hannover ",
},';
$a=explode(' = {',$r);
unset($a[0]);
$i=0;
foreach($a as $val=>$var) {
$r=strtr($var,array("\n"=>"|","\r"=>""));
$r=substr($r,strpos($r,"|")+1);
$r=preg_replace('/\[.*\] = "/Ui','',$r);
$r=strtr($r,array('",|'=>"|"," "=>""));
$r=substr($r,0,strrpos($r,"}"));
echo $i++."|$r<br>";
}
|
|
|
19.10.2005, 22:11
|
#5
|
|
TP-Junior
Registriert seit: Jul 2003
Ort: Dortmund
|
Die Frage die ich mir Stelle ist WARUM hat das Quellfile die Optik einer var_dump Ausgabe eines Arrays?
Wesentlich einfacher ist in solchen Fällen vermutlich ein CSV format oder gleich das ini-File-format.
Ansonsten hier eine reine Regex-Version
PHP-Code:
<?php
$file='[1] = {
["var1"] = " 20 ",
["var2"] = " Herr ",
["var3"] = " 1 ",
["var4"] = " Schmidt ",
["var5"] = " Wien ",
},
[2] = {
["var1"] = " 1 ",
["var2"] = " Frau ",
["var3"] = " 0 ",
["var4"] = " Müller ",
["var5"] = " Hannover ",
},';
preg_match_all('/\[(\d)\].*"\s(\S*)\s".*"\s(\S*)\s".*"\s(\S*)\s".*"\s(\S*)\s".*"\s(\S*)\s".*/sU',
$file,
$matches);
$count = count($matches[0]);
for ($i=0; $i<$count;++$i) {
printf("%s | %s | %s | %s | %s | %s <br />\r" ,
$matches[1][$i],
$matches[2][$i],
$matches[3][$i],
$matches[4][$i],
$matches[5][$i],
$matches[6][$i]);
}
?>
__________________
Rechtschreibfehler wurden zur allgemeinen Erheiterung eingefügt.
|
|
|
19.10.2005, 23:37
|
#6
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Also ich würde auch auf der anderen Seite "anfassen". Entweder das Array serializieren oder per var_export in die Datei schreiben...
Gruss
Jan
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
|
 |