|
im Forum für Webhosting Homepage gefunden: |
bestimmte Daten aus einer Datei auslesen |
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
Also, ich hab ne Datei, in der kommen Namen wie folgt vor:
[Neo007]
danach kommt irgend was anderes, was uninteressant ist, sobald ein bestimmtes Wort in einer Zeile vor kommt, z.B.
Strasse=Hauptstraße
Will ich den NAmen der Straße auslesen, diese angaben sind immer in einer Zeile, es handelt sich um eine Einstellungs file eines Programms, also für jeden Namen ( "[name]" ) will ich betsimmte werte auslesen können ("Straße=xyz" "geburtsdatum=xyz")
Die auszulesenden werte sind für jeden Namen gleich.
Wäre nett wenn ihr mir helfen könntet, am besten schnell.
Thx schon mal
|  Profil
Website
Editieren
Zitieren
|
slackerbitch
Otto-Normal-Poster
Beiträge: 69 |
hm, wie genau sieht eine zeile aus?
zeilenweise einlesen
-> explode (keine ahnung, was du als moegliches trennzeichen hast)
das sollte am einfachsten sein.
---
sig
|  Profil
Website
Editieren
Zitieren
|
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
Aufbau
[Neo]
Name=andy
Nachname=weisnet
Telnummer=123456
Straße=asfdsds
[Neo1]
Nachname=asdfsd
Straße=asdgfdf
Die angaben sind immer gleich aufgebaut, nur sind nicht immer alle vorhanden, das was ich dann abfragen will hat allerding jeder name
|  Profil
Website
Editieren
Zitieren
|
Paraplex
Pixelschubser
Beiträge: 20 |
Beispiel, wie du alle Nachnamen und die zugehörigen [Namen] aus der Datei auslesen kannst. $name[Zahl >=1] liefert den Namen, $nachname[gleiche Zahl >=1] den zugehörigen Nachnamen. Mußt du natürlich entsprechend deinen Bedürfnissen umschreiben.
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: |
//Einlesen der Datei
$newfile = fopen(dateiname,"r");
$content = fread($newfile, filesize(dateiname));
fclose($newfile);
//Achtung! Funktioniert nur vernünftig, wenn [Name] jeweils der
//einzige Eintrag ist, bei dem eckige Klammern verwendet werden.
//Einfügen von Trennzeichen (#)
$content=preg_replace("/#/","Nr.",$content);
$content=preg_replace("/[/","#[",$content);
//Datei wird am Trennzeichen (#) zerlegt und die Einträge werden in ein
//Array geschrieben ($user)
$user=explode("#",$content);
$name=array();
$nachname=array();
//Schrittweises Auslesen des "user-Arrays". Die Namen und Nachnamen
//werden in den Arrays $name und $nachname abgelegt.
foreach($user as $key => $value){
preg_match("/[.*]n/",$value,$nick);
$name[$key]=$nick[0];
preg_match("/Nachname=.*n/",$value,$name1);
$name1=preg_replace("/Nachname=/","",$name1[0]);
$nachname[$key]=$name1;
}
|
Hoffe, das war so in etwa das, was du willst. Falls nicht, erkläre nochmal genauer, wie die Werte ausgegeben werden sollen bzw. wofür du sie brauchst.
Gruß
|  Profil
Editieren
Zitieren
|
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
ob es das ist was ich will???? gute Frage, aber ich werds mal testen.
hiernochmal die genaue verwendung:
Das script soll eine ini file eines FTP Servers auslesen (der auf meinem rechner läuft) und dort für jeden User die download und upload daten auslesen, am ende soll das in Form von stats ausgegeben werden, also wieviel MB jeder user geuppt und gesaugt hat.
auszug aus dem file:[tommy]
Login=tommy
Pass=xyz
Home-Ip=-= All IP Homes =-
TimeOut=600
MaxConPerIp=1
MaxUsers=0
RatioEnabled=1
RatioMethod=0
RatioUp=1
RatioDown=3
RatioCredit=100000000000
MaxSpeedRcv=512
MaxSpeedSnd=512
QuotaCurrent=0
QuotaMax=0
Dir0=C:ftp
Attr0=R----LS-
Dir1=C:ftpuploadTommy
Attr1=RW-AMLS-
Stat_Login=9
Stat_LastLogin=06.11.2002 01:01:32
Stat_LastIP=192.168.2.110
Stat_KBUp=250602756
Stat_KBDown=28359813
Stat_FilesUp=2
Stat_FilesDown=6
Stat_FailedUp=0
Stat_FailedDown=1
[Neo007]
Login=Neo007
Pass=xyz
Home-Ip=-= All IP Homes =-
RelativePath=1
TimeOut=600
MaxConPerIp=1
MaxUsers=0
RatioMethod=0
RatioUp=1
RatioDown=1
RatioCredit=0
MaxSpeedRcv=512
MaxSpeedSnd=512
QuotaCurrent=0
QuotaMax=0
Dir0=C:ftp
Attr0=RWDAMLSK
Stat_Login=7
Stat_LastLogin=05.11.2002 12:45:25
Stat_LastIP=192.168.2.120
Stat_KBUp=367431399
Stat_KBDown=923739912
Stat_FilesUp=54
Stat_FilesDown=3
Stat_FailedUp=0
Stat_FailedDown=0
die angaben Stat_KBUp und Stat_KBDown sind hierbei die, die es zum auslesen gilt.
|  Profil
Website
Editieren
Zitieren
|
Paraplex
Pixelschubser
Beiträge: 20 |
Da lag ich ja gar nicht soweit daneben. Wenn die Datei wirklich genau so aussieht, wie du gepostet hast, kannst du z.B. folgendes verwenden:
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: |
//Einlesen der Datei
$newfile = fopen(dateiname,"r");
$content = fread($newfile, filesize(dateiname));
fclose($newfile);
//Datei wird am Trennzeichen ( [ ) zerlegt und die Einträge werden in ein
//Array geschrieben ($user)
$user=explode("[",$content);
//Damit du siehst wie es funktioniert, gebe ich alle Daten nachher als
//Beispiel in Tabellenzellen aus.
echo" ";
//Schrittweises Auslesen des "user-Arrays". Die Namen, Upload und
//Download werden in den Arrays $name, $upload und $download abgelegt.
foreach($user as $key => $value){
preg_match("/.*]n/",$value,$nick);
$nick[0]=preg_replace("/]/","",$nick[0]);
$name[$key]=$nick[0];
preg_match("/Stat_KBDown=.*n/",$value,$name1);
$name1[0]=preg_replace("/Stat_KBDown=/","",$name1[0]);
$download[$key]=$name1[0];
preg_match("/Stat_KBUp=.*n/",$value,$name1);
$name1[0]=preg_replace("/Stat_KBUp=/","",$name1[0]);
$upload[$key]=$name1[0];
//Daten in Tabellenzellen schreiben
if ($key>=1)
echo"$name[$key] | $download[$key] | $upload[$key] | ";
}
echo" ";
|
Hoffe, ich hab da jetzt auf die Schnelle keinen groben Fehler reingebaut.
Gruß
|  Profil
Editieren
Zitieren
|
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
THX
Sag mal wie lange beschäftigst du dich schon mit php, ich meine ich mach auch hin und wieder was, aber bis ichs so drauf hab wie du bin ich 80 und kann net mehr mal ein Notebook bedienen.
Thx nochmal
funtzt wie ne eins
PS: wie müsste ich das ganze erweitern wenn ich nur bestimmte namen abfragen will, also in der ausgabedatei dann einfach deine Datei auf rufe, und beim Aufruf ne Variable mit dem abzufragenden Namen mitschicke????
|  Profil
Website
Editieren
Zitieren
|
Paraplex
Pixelschubser
Beiträge: 20 |
Hier die veränderten Abschnitte:
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: |
//Variable, die du "mitschickst", mußt du dann hier natürlich löschen.
//Erhält als Wert den Usernamen ohne eckige Klammern.
//z.B. tommy oder Neo007
$uname="Neo007";
$user=explode("[",$content);
echo" ";
foreach($user as $value){
//Es werden nur Datensätze zur weiteren Verarbeitung zugelassen, die
//deinem "erweiterten Suchkriterium" genügen
if (preg_match("/$uname]/",$value)){
//Was hier vorher stand ist jetzt überflüssig, da du den Usernamen
//bereits mitlieferst
preg_match("/Stat_KBDown=.*n/",$value,$name1);
$name1[0]=preg_replace("/Stat_KBDown=/","",$name1[0]);
//Jetzt sind natürlich keine Arrays mehr nötig, da nur ein Datensatz
$download=$name1[0];
preg_match("/Stat_KBUp=.*n/",$value,$name1);
$name1[0]=preg_replace("/Stat_KBUp=/","",$name1[0]);
$upload=$name1[0];
echo"$uname | $download | $upload | ";
}
}
echo" ";
|
Das wars eigentlich schon.
Zum Verständnis solltest du dir mal den Artikel zu Regular Expressions des PHP-Manuals durchlesen (hoffe du bist einigermaßen fit im Englischen):
http://php3.de/manual/de/ref.pcre.php
oder für den Anfang verständlicher (und auf deutsch):
http://develnet.org/tech/dclp/regexp.html
Damit bist du dann denke ich in der Lage, die einzelnen Schritte nachzuvollziehen und noch eventuell notwendige Änderungen selbst vorzunehmen.
|  Profil
Editieren
Zitieren
|
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
Danke nachvollziehen kann ich das auch ohne Die texte einigermaßen, werd sie mir aber auch nochmal anschauen,
Thx nochmal, ist echt nett von dir.
|  Profil
Website
Editieren
Zitieren
|
Neo007
Pixelschubser Threadstarter
Beiträge: 7 |
Danke nachvollziehen kann ich das auch ohne Die texte einigermaßen, werd sie mir aber auch nochmal anschauen,
Thx nochmal, ist echt nett von dir.
|  Profil
Website
Editieren
Zitieren
| |
|
|