php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.09.2005, 19:29  
Gast
 
Beiträge: n/a
Standard Suchskript für Textdateien aus Perl nach php

Das Skript, das ich derzeit versuche auf php-Beine zu stellen, habe ich bereits mit viel Zeit und Mühe als perl.pl-Script laufen (live kann man das unter Ag Freiraum und Vegetation sehen). Ich will das php-Skript dann später in eine neue, mit Joomla! (Mambo) verwaltete Seite integrieren. Das kann ich zwar jetzt auch per wrapper, aber da ist eine direkte php-Lösung doch eleganter. Ausserdem wollte ich immer schon mal in php reinschnüffeln.

Soweit.

Ich bin mit meinem Skript schon soweit, dass ich mehrere Begriffe suchen lassen kann. Zudem kann ich die Quelldatei in einem select-Feld auswählen oder mehrere wählen. Die erste Zeile dient als Inhaltsbeschreibung und wird farblich anders dargestellt. Der gesuchte Begriff wird in der Ausgabe fett dargestellt.

Meine bisherige Arbeit sieht bislang folgendermassen aus:

PHP-Code:
<?
          $auswahl
$_POST['auswahl'];
                    foreach (
$auswahl as $datei) {
            
              
$zeilen=file($datei);
                        
$i=count($zeilen)-1;
              
$header $zeilen[0];
              unset(
$zeilen[0]);
              
              
$suche$_POST['suche'];
              
$suchbegr explode(" "$suche);
              
                  foreach (
$zeilen as $line){
                      foreach (
$suchbegr as $suchb) {
                          if (
preg_match("/$suchb/",$line)){
                          
$lin str_replace($suchb"[b]" .$suchb ."[/b]"$line);
                                                    
$result[]=$lin;
                          }
                                                    
                      }
                  }
          
            print 
"

  </p>

[b]Im Verzeichnis: [/b]<font color=\"blue\">" 
.$header ."</font>
"
;
            print 
"wurden " .count($result) ." Beitr&auml;ge in " .count($zeilen). " Literaturangaben gefunden.</p>";
            print 
"<hr>";
                for(
$x=0;$x<count($result);$x++){
                echo 
"

.$result[$x] . "</p>";
                }
                                                    }
?>
Ich habe aber das Problem, dass bei mehreren ausgewählten Quelldateien die Ausgabe immer die gefundenen Treffer der vorangegangenen Suche mit aufführt. Muss ich das Array $result leeren?

Ausserdem will ich die Möglichkeit haben, bei der Suche zwischen UND / ODER bei der Eingabe mehrerer Suchbegriffe zu wechseln.

In dem Perl-skript habe ich das mit Hilfe einiger Forumsmitgliedern (allen sei herzlich gedankt) wirklich elegant und mit wenigen Zeilen Code hinbekommen. Nur kann ich das nicht für mich in php übersetzen.

in perl sieht der zentrale Suchteil dann so aus:

code:
if ($BOOL eq 'oder'){
foreach $text (@TEXTS) {
if($line =~ /$text/){
$line=~ s/$text/[b]$text<\/b>/g; # Highligt the text found

&result;

}
}
}

elsif ($BOOL eq 'und') {
my $nomatch = @TEXTS;
for my $text (@TEXTS) {
my $textnometa = quotemeta ($text);
last unless $line =~ s/$textnometa/[b]$text<\/b>/g;
--$nomatch;
}
&result unless $nomatch;
}



Mir kommt es so vor, als ob ich die brauchbarsten Möglichkeiten in php übersehen habe und deshalb eine einfache und knappe Methode übersehen habe.

Vielleicht kann mir ja jemand weiterhelfen?

Gruß Georges
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.09.2005, 15:01  
Gast
 
Beiträge: n/a
Standard zeilenweises Suchskript für Textdateien (Flatfiles)

Habe das mittlerweile hinbekommen.
ich möchte das hier nur posten, falls mal jemand etwas ähnliches sucht.

PHP-Code:
<?
/*  
$subjects ist ein Array, das die Suchbegriffe enthält
$file enthält den Pfad zur Datei
$matches ist ein Array, in das die gefundenen Zeilennummern geschrieben werden
$type enthält die Art, wie gesucht wird (AND bzw. OR)
'search' ist der Name des Texteingabefeldes im Formular
'files' ist der Name des Auswahlfeldes wobei die einzelnen Text-Dateien (.txt oder .csv)
mit ihrem Pfad folgendermassen übergeben werden:
   <option value="./verzeichnis/Datei.txt">Name</option>
'boolean' Auswahlfeld mit den Optionen AND und OR:
   <option value="AND">und</option>
   <option value="OR">oder</option>
Viel Erfolg bei der Suche!
*/

$search$_POST['search'];
if (
"" == $search) {
print 
"

[b]<font color=\"red\">Sie haben kein Suchbegriff angegeben!</font>[/b]</p>\n
\n
\n"
;
}
else 
{

    
$search$_POST['search'];
    
$subjects explode(" "$search);                            
    
$files$_POST['files'];
    
$type$_POST['boolean'];


          foreach (
$files as $file) {
         
                
$matches = array();
            
$content file($file);
            
$header $content[0];// Die erste Zeile kann für Inhaltsangaben genutzt werden
                    
unset($content[0]);
        
            foreach(
$content as $lineno => $line) {
                switch(
$type) {
                case 
'AND':
                    
$foundAll true;
                    foreach(
$subjects as $subject) {
                        
//  wenn einer der Suchbegriffe nicht gefunden wurde, abbrechen
                        
if(strpos($line$subject) === false) {
                            
$foundAll false;
                            break;
                        }
                    }
                    if(
$foundAll === true)
                       
$matches[] = $lineno;
                    
$matches array_unique($matches);
                    
                    break;
                case 
'OR':
                    foreach(
$subjects as $subject) {
                        if(
strpos($line$subject) !== false) {
                            
$matches[] = $lineno;
                            break;    
//  nach dem ersten Treffer in dieser Zeile können wir die Suche abbrechen
                        
}
                    }
                    
$matches array_unique($matches);
                                        break;
                }
            }
   
            print 
"
"
;
                print 
"

[b]Im Verzeichnis: [/b]<font color=\"blue\">" 
.$header ."</font>
"
;
                if (
count($matches)==1){
                print 
"wurde " .count($matches)." Beitrag in " .count($content). " Literaturangaben gefunden.</p>";
                }
            else {
                print 
"wurden " .count($matches)." Beitr&auml;ge in " .count($content). " Literaturangaben gefunden.</p>";
                } 
                print 
"<hr>";
            
                        foreach(
$matches as $lineno) {
                                        foreach (
$subjects as $subject) {
                                        
$content[$lineno]= str_replace($subject"[b]".$subject."[/b]"$content[$lineno]);
                                        }
                    print 
"

.$content[$lineno] . "</p>";

                }
                }
}
?>
Falls Fehler auftauchen oder jemand Verbesserungsvorschläge hat, kann er das ja hier posten.

Gruß
Georges
 
 


Themen-Optionen
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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php und perl im vergleich Off-Topic Diskussionen 17 05.03.2009 19:13
[Erledigt] Download von Textdateien erzwingen PHP Tipps 2006 4 23.02.2006 18:17
PHP Code in Perl einbinden PHP Tipps 2006 6 22.02.2006 08:03
[Erledigt] Textdateien HTML, Usability und Barrierefreiheit 2 24.01.2006 12:02
Perl (CGI) Scripte überall ausführbar? becks123 Server, Hosting und Workstations 4 17.01.2006 21:20
perl eval und $@ in php? PHP Tipps 2007 4 15.11.2005 13:59
Suche Antwort -> PHP oder Perl? c01001 Beitragsarchiv 9 10.10.2005 22:31
München: Programmierer PERL und PHP/MySQL dringend gesucht Beitragsarchiv 0 24.09.2005 10:13
perl compilieren greenrover Server, Hosting und Workstations 4 07.09.2005 10:12
perl hash aus mysql blob mit php lesen PHP-Fortgeschrittene 6 07.07.2005 17:36
Perl Script von PHP aus aufrufen? PHP Tipps 2005 9 11.03.2005 01:39
Perl Problem mit Debian & Apache2 c01001 Server, Hosting und Workstations 9 03.12.2004 15:27
[Erledigt] Verknüpfung zweier Textdateien PHP Tipps 2004 1 12.10.2004 11:00
[Erledigt] PHP vs PERL vs Java und andere Off-Topic Diskussionen 22 22.09.2004 19:05
[Erledigt] Perl richtig installiert oder falsch ? testen aber wie ? c01001 Server, Hosting und Workstations 2 31.08.2004 22:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
\perl nach php\, perl auswahl mehrer dateien

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.