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. 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:
Was mir noch fehlt ist eine Verzweigung, die nach UND / ODER unterscheidet und die Suche entsprechend ändert. Im Formular habe ich hierzu ein weiteres select eingebaut, das zwischen "und" / "oder" unterscheidet.
Ausserdem liefert mein Skript bei mehreren Suchbegriffen auch mehrfach die gleichen Zeilen, wobei jeweils auch nur ein Suchbegriff fett-hervorgehoben ist.
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:
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.
Zudem wundert es mich immer wieder, dass es nicht so eine einfache Funktion gibt, die ein array $C ausgibt in dem nur die Strings aus array $B enthalten sind in denen Strings aus array $A zu finden sind.
Oder ich muss das bislang übersehen haben?
Gruß
Georges
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. 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'];
$datei = file($auswahl[0]);
$i=count($datei)-1;
$header = $datei[0];
unset($datei[0]);
$suche= $_POST['suche'];
$suchbegr = explode(" ", $suche);
foreach ($suchbegr as $suchb){//liefert alle ODER zurück
foreach ($datei as $line) {
if (preg_match("/$suchb/",$line)){
$lin = str_replace($suchb, "<b>" .$suchb ."</b>", $line);
$result[]=$lin;
}
}
}
print "<p><font color=\"blue\">" .$header ."</font><br>";
print "Es wurden " .count($result) ." Beiträge in " .count($datei). " Literaturangaben gefunden.</p>";
print "<hr>";
for($x=0;$x<count($result);$x++)
{
echo "<p>" .$result[$x] . "</p>";
}
?>
Was mir noch fehlt ist eine Verzweigung, die nach UND / ODER unterscheidet und die Suche entsprechend ändert. Im Formular habe ich hierzu ein weiteres select eingebaut, das zwischen "und" / "oder" unterscheidet.
Ausserdem liefert mein Skript bei mehreren Suchbegriffen auch mehrfach die gleichen Zeilen, wobei jeweils auch nur ein Suchbegriff fett-hervorgehoben ist.
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; }
Zudem wundert es mich immer wieder, dass es nicht so eine einfache Funktion gibt, die ein array $C ausgibt in dem nur die Strings aus array $B enthalten sind in denen Strings aus array $A zu finden sind.
Oder ich muss das bislang übersehen haben?
Gruß
Georges
Kommentar