SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 17.05.2004, 09:19:36
kelea kelea ist offline
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($contentsstrpos($contents,"<Superclass=")+2,$length);
        echo 
"<br> $superclass <br>";
    }
    
fclose($zeiger);
}

?>


Habt vielen Dank!
Kelea
Mit Zitat antworten
  #2  
Alt 17.05.2004, 09:24:41
feuervogel feuervogel ist offline
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.
Mit Zitat antworten
  #3  
Alt 17.05.2004, 09:43:20
kelea kelea ist offline
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 ...
Mit Zitat antworten
  #4  
Alt 17.05.2004, 11:10:43
feuervogel feuervogel ist offline
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
Mit Zitat antworten
  #5  
Alt 17.05.2004, 11:47:18
kelea kelea ist offline
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!
Mit Zitat antworten
  #6  
Alt 17.05.2004, 12:03:09
feuervogel feuervogel ist offline
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;)
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:23:19 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt