art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 14.10.2005, 15:21   #1
TP-Newbie
 
Registriert seit: Oct 2005
MCBurner macht alles soweit korrekt

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?
MCBurner ist offline   Mit Zitat antworten


Alt 14.10.2005, 15:36   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 19.10.2005, 17:30   #3
TP-Newbie
 
Registriert seit: Oct 2005
MCBurner macht alles soweit korrekt
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 :-)
MCBurner ist offline   Mit Zitat antworten
Alt 19.10.2005, 18:01   #4
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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>";

__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 19.10.2005, 22:11   #5
TP-Junior
 
Benutzerbild von EdData
 
Registriert seit: Jul 2003
Ort: Dortmund
EdData ist auf einem guten Weg
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.
EdData ist offline   Mit Zitat antworten
Alt 19.10.2005, 23:37   #6
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Also ich würde auch auf der anderen Seite "anfassen". Entweder das Array serializieren oder per var_export in die Datei schreiben...

Gruss
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Gezieltes Auslesen bestimmter Werte aus einem Textfile? Gezieltes Auslesen bestimmter Werte aus einem Textfile?
« [mysql] Mehrfaches count(*) in einer Abfrage? | Feld immer um 1 erhöhen wenn aufgerufen »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67