CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
17.05.2004, 09:19:36
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 3
|
|
unterschiedliche string aus Datei einlesen
Hallo alle zusammen,
als kleine newbie weiss ich jetzt nicht mehr weiter:
Ich würde gerne aus Dateien Zeichenketten auslesen, um sie dann weiter zu verarbeiten. Diese Zeichenketten haben ein gemeinsames Erkennungsmerkmal (superclass = ...) und können Null bis mehrfach in einer Datei auftreten.
Ich krieg es hin, dass ich die Dateien der Reihe nach aufrufe und bearbeiten [foreach] und auch die Anzahl der Strings kann ausmachen [substr_count], aber ich verzweifle grad daran, wie ich es anstellen soll, dass auch alle gesuchten strings ausgeschrieben werden.
Bisher wird immer nur der erste String geschrieben udn zwar so häufig wie substr_count angibt.. ...
Wahrscheinlich muss ich irgendwo noch einen Zähler einbauen bzw. das Zwischenergebnis in'nem array oder so abspeichern, aber wo?
PHP-Code:
<?php
// Füllen eines Arrays mit allen Inhalten eines Verzeichnisses
$handle = opendir('.');
while (false !== ($datei = readdir($handle))) {
if ($datei != "." && $datei != "..") {
$dateien[] = $datei;
}
}
closedir($handle);
foreach ($dateien as $dateiname) {
$contents = file_get_contents($dateiname) or die ("Could not read source file");
$zeiger = fopen($dateiname, "r");
$anzahl = substr_count ($contents, "Superclass=");
for ($i=0;$i <= $anzahl; $i++){
$length = strpos($contents,">") - strpos($contents,"<Superclass=")-2;
$superclass =substr($contents, strpos($contents,"<Superclass=")+2,$length);
echo "<br> $superclass <br>";
}
fclose($zeiger);
}
?>
Habt vielen Dank!
Kelea
|
17.05.2004, 09:24:41
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
willkommen im forum!
in der auszulesenden datei steht also irgendwo öfters mal
<Superclass=23>
z.b.? und dazwischen beliebiger text und du hättest gerne die zahl die steht?
das ist nicht leicht, weil man eventuell regex benutzen muss.
|
17.05.2004, 09:43:20
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 3
|
|
ja, so isses.
nur, dass da keine Zahl, sondern Text steht (z.B. Zeitlupe) und dass diese Tags <superclass> alle hintereinander stehen.
Aber ja, genau den Text hätt ich gern.
Weisst du Rat?
Ich versuch's grad mit dem Postionieren eines Zeigers auf das Ende von superclass1, um dann von dort weiterzugehen, aber es klappt nicht ...
|
17.05.2004, 11:10:43
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
also. die lösung ohne reguläre ausdrücke wäre vielleicht, das script durchzulaufen, bist ein <superclass=" kommt, und dann so lange einzulesen, bis eben "> kommt.
die lösung mit regex könnte so aussehen, bringt dir aber nicht viel (vom lerneffekt her:), da dieses thema sehr komplex ist und es zu verstehen nicht grade jedermanns(/fraus?) sache ist.
PHP-Code:
<?php
$text = "<superclass="bla"><superclass="blubb"><superclass="schönes wetter">"; //so sieht dein text doch aus, oder?
preg_match_all( "%<superclass="(.+)">%iU" , $text , $found );
echo "<pre>";
print_r( $found );
echo "</pre>";
?>
der code ist getestet, ergebnis hier:
http://doenerbude.kicks-ass.net/preg.php
ein tutorial über reguläre ausdrücke, das mir zumindest den einstieg erleichtert hat, findest du da:
http://tut.php-q.net/regex.html
|
17.05.2004, 11:47:18
|
Anfänger
|
|
Registriert seit: May 2004
Beiträge: 3
|
|
Die Lösung mit regulären Ausdrücke läuft. Danke!
Jetzt muss ich nur rauskriegen, wie ich die Ergebnisse aus dem Array so rausgelesen bekommen, dass ich damit weiterarbeiten kann.
Verstehe ich das richtig, dass das ein mehrdimensionaler Array ist? Oder fall ich da auf die Darstellung in der Ergebnisdatei aufgrund meines noch sehr begrenzten Wissen und Erfahrung rein?
Die Lösung ohne reguläre Ausdrücke würde mich aber auch interessieren, da ich genau dies probiert, aber nicht geschafft habe. Irgendwie hakt's daran, dass ich weiss, welche Funktion dies macht (ich vermute fgets oder fgetc) und wo ich dann meine strings "wiederfinde" ...
Und ja, das Lernen von regulären Ausdrücken würde frau gerne noch etwas verschieben, PHP reicht mir grad völlig.
Daher werde ich noch ein wenig an regex-freien Lösung experimentieren.
Vielen Dank, Feuervogel!
|
17.05.2004, 12:03:09
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
hmmm...also ehrlich gesagt, erst mal die text-datei mit
http://www.php.net/manual/de/functio...t-contents.php
einlesen.
so, nun kannst du dir eine for-schleife basteln...
for( $i = 0; $i < str_len( $text ) ; $i++ ) {
und nun jedes einzelne zeichen abarbeiten...
}
oder, was mir auch grade einfällt...
den text mit
$array = explode( "<superclass="" , $text );
aufteilen.
und dann für jedes array-element noch mal teilen:
$endgueltig = array();
foreach( $array as $key => $value ) {
$subarray = explode( "">" , $value );
$endgueltig[] = $subarray[ 0 ];
}
die lösung mit den regulären ausdrücken ist aber wesentlich eleganter...naja...ist halt was, das nicht grade leicht ist, da du ja auch die länge der einzelnen worte nicht kennst.
zu der regex-lösung:
foreach( $found[ 1 ] as $key => $value ) {
echo $value;
}
probier das mal;)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:23:19 Uhr.
|