Nur Vorkommen aus ersten gefundenem record werden angezeigt


  • Hallo,
    brauche dringend die Info warum bei meinem Script alle Vorkommen(Textstellen) des Suchworts ($search) nur aus dem ersten gefunden record angezeigt werden.
    Muß damit Quellenstudium für meine Diplomarbeit betreiben und hab nur wenig Ahnung von php.
    Danke vorab.


    Moni

  • Wenn ich das richtig bei dir sehe wird das zu einer Endlosschleife bei dir, oder?
    Den du fängst immer bei 0 + 1 ($pos + $i) an zu suchen, aber keine der beiden Variabeln wird danach richtig erhöht, oder?


    Ich arbeite derzeit recht viel mit String-Funktionen und daher auch mit genau diesem Codeblock. Bei mir würde deine 2. while-Schleife wie folgt aus:

    PHP
    <span class="syntaxdefault"></span><span class="syntaxcomment">// Guter Programmierstil: Immer Variabeln initialisieren<br /></span><span class="syntaxdefault">$end </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// Solange unsere Variabel $pos kein False als Inhalt hat lassen wir die Schleife durchlaufen<br />// !== Ist ein Strikter vergleich, dass bedeutet das 0 nicht als false gewertet wird (es könnte ja sein, dass der Suchstring direkt am Anfang steht)<br />// die klammern um $pos = ... bedeuten, dass wir erst die Variabel befüllen und danach erst den neuen Inhalt vergleichen<br /></span><span class="syntaxkeyword">while((</span><span class="syntaxdefault">$pos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $search</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $end</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">){<br />    </span><span class="syntaxcomment">// Wenn wir etwas gefunden haben erhöhen wir die neue Suchposition um die Fundstelle + die Länge des Suchstrings<br /></span><span class="syntaxdefault">    $end </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $pos </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">'<b>HIER:</b> '</span><span class="syntaxkeyword">.(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $pos</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">))).</span><span class="syntaxstring">'<br/>'</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> </span>
  • Sarkkan


    Nicht schlecht doch irgendetwas stimmt nicht. Leider werden zwar nun alle records angezeigt aber jedesmal mit 21mal HIER: glastransport untereinander.


    Allein im ersten record müssten 33 Vorkommnisse gefunden werden.


    Und: Leider fehlen bei Dir die Zeichen vor (-10) und hinter(115) den Vorkomnissen die für mich wichtig sind bei der Beurteilung der Quellen.


    Sonst schonmal Dankedankedanke


    M.

  • Sarkkan


    Quellen also die Datenbankwerte sind die Inhalte von kompletten .txt-Dateien oder html-Seiten (also Seitenquelltext) wie zB die von

    Code
    http://www.hubtex.com/allradtechnik/produkte/glastransportsysteme.html
  • Sarkkan


    schon ausprobiert ;) ändert aber nur die Schreibweise also es wird in GROSS und klein unterschieden was die Anzahl der abgezeigten Vorkommen erhöht.


    Vielleicht könnte es ev mit substr_count auch gehen.


    Nur wie ist mir schleierhaft. Dafür hab ich echt zu wenig Ahnung.


    Und wo baue ich jetzt die -10,115???


    Moni

  • Blöde Frage, was genau hast du den eigentlich vor ? :D
    Ist ja schon ein Unterschied die Position (strpos) und die Anzahl (substr_count) zu ermitteln^^


    Ich habe leider immer noch keinen Blassen schimmer, was das überhaupt bedeuten sollte? :/
    -10.. 115.. klär mich bitte auf, was du mit diesen Werten vor hattest

  • Sarkkan
    substr_count hatte jemand in einem anderen Forum gepostet, meine Frage war dieselbe, habe aber nicht erfahren wieso und wie ich das einsetzen soll. Nicht böse sein.


    Also abgehakt.


    Mit pos -10,115 laß ich mir die Vorkommen samt der sie umgebenden Textstellen anzeigen, zB beim Suchwort glas:


    HIER: ie Bauglas laut Peter Weber vom Wuppertal Institut für Klima, Umwelt, Energie ... ... ...




    Moni

  • Zitat von &quot;rernanded&quot;

    substr_count hatte jemand in einem anderen Forum gepostet, meine Frage war dieselbe, habe aber nicht erfahren wieso und wie ich das einsetzen soll. Nicht böse sein.

    Achso, du gehst uns also Fremd :cry: :lol:
    Also substr_count zählt einfach wie oft ein bestimmter String in einem anderen String vorkommt^^
    [quote="rernanded"Mit pos -10,115 laß ich mir die Vorkommen samt der sie umgebenden Textstellen anzeigen, zB beim Suchwort glas:


    HIER: ie Bau[b]glas[/b] laut Peter Weber vom Wuppertal Institut für Klima, Umwelt, Energie ... ... ...[/quote]
    Aso.. ja, dass müsstest du dann bei meiner Schleife noch einbauen :D Ich war irgendwie davon ausgegangen, dass du die Länge des Suchwortes gezählt hättest oder sonst irgendwas^^
    Soll den eigentlich das Wort Glas oder Glastransport gefunden werden? :P

  • Sarkkan


    Tja und wie und wo genau einbauen? Da gibts dreimal pos. Und wahrscheinlich muß ich auch ( ) setzen.


    Du weißt doch ich bin kein Profi :wink:


    Moni


    PS Das Suchwort kann ich jeweils ändern. Im Prinzip such ich nach allem was mit Glas (Glaslagerung Glastransport und -logistik) zu tun hat

  • Zitat von &quot;rernanded&quot;

    Tja und wie und wo genau einbauen? Da gibts dreimal pos. Und wahrscheinlich muß ich auch ( ) setzen.

    PHP
    <span class="syntaxdefault"></span><span class="syntaxcomment">// Guter Programmierstil: Immer Variabeln initialisieren<br /></span><span class="syntaxdefault">$end </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// Solange unsere Variabel $pos kein False als Inhalt hat lassen wir die Schleife durchlaufen<br />// !== Ist ein Strikter vergleich, dass bedeutet das 0 nicht als false gewertet wird (es könnte ja sein, dass der Suchstring direkt am Anfang steht)<br />// die klammern um $pos = ... bedeuten, dass wir erst die Variabel befüllen und danach erst den neuen Inhalt vergleichen<br /></span><span class="syntaxkeyword">while((</span><span class="syntaxdefault">$pos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$end</span><span class="syntaxkeyword">)) !== </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">){<br />    </span><span class="syntaxcomment">// Wenn wir etwas gefunden haben erhöhen wir die neue Suchposition um die Fundstelle + die Länge des Suchstrings<br />    </span><span class="syntaxdefault">$end </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$pos </span><span class="syntaxkeyword">+ </span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">);<br />    echo </span><span class="syntaxstring">'<b>HIER:</b> '</span><span class="syntaxkeyword">.(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$pos</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">) + </span><span class="syntaxdefault">115</span><span class="syntaxkeyword">)).</span><span class="syntaxstring">'<br/>'</span><span class="syntaxkeyword">;<br />}  </span><span class="syntaxdefault"></span>

    Wir wollen die ersten 10 Zeichen vor unserer Fundstelle und 115 weitere Zeichen nach unserem Suchwort.


    Zitat von &quot;rernanded&quot;

    PS Das Suchwort kann ich jeweils ändern. Im Prinzip such ich nach allem was mit Glas (Glaslagerung Glastransport und -logistik) zu tun hat

    Aber deine Schleife sollte 33x das Wort "Glastransport" finden? Oder 33x das Wort "Glas"?
    Je nachdem muss ja dann der Suchstring geändert werden.


    Wenn es daran nicht liegt, dann lehre ich dich doch mal das Debugen :p
    Welche Stellen findet er den nicht? Gibt es unterschiede zu den Gefunden Suchstellen?

  • Sarkkan
    Super bis jetzt, da muß aber noch ein bug sein. Wie Du unten siehst hat der record in der DB nur zweimal das Wort glas, angezeigt werden aber drei Vorkommen???


    Test:
    record in DB=
    44444444444444444444glas 55555555555555555555555555 6666666666666666666666 mmmmmmmmmmmmmmmmmmmmmmmm glas nnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnn kkkkkkkkkkkkkkk iiiiiiiiiiiiiiii llllllllllllllllllllllllllllllllllll


    angezeigt wird=
    HIER: 4444444444glas 55555555555555555555555555 6666666666666666666666 mmmmmmmmmmmmmmmmmmmmmmmm glas nnnnnnnnnnn


    HIER: mmmmmmmm glas nnnnnnnnnnnnnnnnnnnnn nnnnnnnnnnnnnnnnnnnnn kkkkkkkkkkkkkkk iiiiiiiiiiiiiiii llllllllllllllllllllll

  • Nein, angezeigt werden 2 nur in dem 1. Steckt (wegen der 115Zeichen weiter nach vorne schauen) zusätzlich schon einmal der 2. Fund drin^^
    Was wir machen könnten wäre erst ab dem Fund + 115Zeichen weiter weiter suchen zu lassen, das würde aber mehr oder weniger das Ergebnis verfälschen weil wir dann nur noch 1x bei dir "Glas" finden würden.

  • Sarkkan


    Stimmt(Staun), ich habs geprüft.
    Aber sieh hier woran es liegt, das passiert wenn Fundstellen nicht mind. 115(-4 für glas und -10) also 101 Zeichen dahinter haben. Thats it.
    Moderatorin Laura sagt so sei es okay, da manches Vorkommen halt weniger als 115 Zeichen vom davorliegenden Vorkommen "weg" ist, somit quasi im Radius des davorliegenden Vorkommens liegt.
    Wäre das denn änderbar, sodaß nach x Zeichen Schluß ist falls das nächste Vorkommen inkl. der Zeichen davor (-10) Teil des jeweils angezeigten Vorkommens ist?


    Moni


    Beispiel:


    HIER: 4444444444glas 55555555555555555555555555 6666666666666666666666 mmmmmmmmmmmmmmmmmmmmmmmm glas nnnn w


    HIER: mmmmmmmm glas nnnn wowwowowwoooo glas ----------------------------------------------------------------------


    HIER: wowwoooo glas -------------------------------------------------------------------------------------------------------

  • @Laura
    Wäre das denn änderbar, sodaß nach x Zeichen Schluß ist falls das nächste Vorkommen inkl. der Zeichen davor (-10) Teil des jeweils angezeigten Vorkommens ist.
    Klingt kompliziert, hoffe Du weißt was gemeint ist.

  • Klar wäre es das :)
    Willst du dich da an der Programmierung versuchen? Ich "Übersetzte" dein Vorgehen, markiere Schlagwörter und Verweise schon einmal auf Funktionen und du Programmierst es dann selbst? :)


    In unserer Suchschleife stellen wir erst einmal einen "Substring" her, der -10 Zeichen vor der Fundstelle beginnt und weitere 115 Zeichen einschließt.
    In unserem Substring prüfen wir ob unser Suchwort noch einmal drin vorkommt (Bzw. hier würde sich eine Suche von hinten eher eignen). Wenn es noch einmal vorkommt und die Position des neuen Fundes nicht die selbe ist wie die Eigentliche Suchstelle: verkürzen wir unseren Substring (hierzu haben wir ja schon die benötigten Positionen^^).
    Anschließend geben wir (unabhängig davon, ob wir den Suchstring noch einmal gefunden haben oder nicht) unseren Substring aus^^


    Wenn dir mein Gefassel zu dumm ist, sag bescheid dann helfe ich dir :)


    Gruß
    Dustin

  • Sarkkan


    Hi,
    habs mal probiert und verstehe auch wie es gehen könnte (strripos etc.), bin aber auch entnervt weil mir die wichtigen zusammenhängenden Kenntnisse fehlen. Da muß man ja genau wissen wann eine ) ] } kommt.
    Sorry aber Du mußt nochmals ran wenn Du Lust hast. :D Hab da ja noch andere Probleme zB mit den vielen Tags(html u.a.) die ich mit strip_tags gar nicht alle entfernt kriege.
    Ich finde wir sind ja schon weit gekommen. php ist auch nicht richtig mein Ding, ist aber gut brauchbar, nur bin ich so gar kein IT-Typ. Vielleicht fehlt mir auch die Logik dafür. Ich muß auch ein wenig an meine eigentliche "Arbeit" denken und bin schon ziemlich müde heut.


    Schlaf gut.


    Moni

  • Okey :D
    Hier mal mein Versuch, es müsste eigentlich klappen^^ Ansonsten würde ich mich denke ich nachher mal kurz in meiner Pause noch mal drum kümmern^^

    PHP
    <span class="syntaxdefault"></span><span class="syntaxcomment">// Guter Programmierstil: Immer Variabeln initialisieren<br /></span><span class="syntaxdefault">$end </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxcomment">// Solange unsere Variabel $pos kein False als Inhalt hat lassen wir die Schleife durchlaufen<br />// !== Ist ein Strikter vergleich, dass bedeutet das 0 nicht als false gewertet wird (es könnte ja sein, dass der Suchstring direkt am Anfang steht)<br />// die klammern um $pos = ... bedeuten, dass wir erst die Variabel befüllen und danach erst den neuen Inhalt vergleichen<br /></span><span class="syntaxkeyword">while((</span><span class="syntaxdefault">$pos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$end</span><span class="syntaxkeyword">)) !== </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">){<br />    </span><span class="syntaxcomment">// Wenn wir etwas gefunden haben erhöhen wir die neue Suchposition um die Fundstelle + die Länge des Suchstrings<br />    </span><span class="syntaxdefault">$end </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$pos </span><span class="syntaxkeyword">+ </span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">);<br /><br />    </span><span class="syntaxdefault">$searchResult </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$str</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$pos</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">10</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">) + </span><span class="syntaxdefault">115</span><span class="syntaxkeyword">);<br />    while((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">)) != </span><span class="syntaxdefault">$pos</span><span class="syntaxkeyword">){<br />        </span><span class="syntaxdefault">$searchResult </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$subPos</span><span class="syntaxkeyword">);<br />    }<br /><br />    echo </span><span class="syntaxstring">'<b>HIER:</b> '</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'<br/>'</span><span class="syntaxkeyword">;<br />}    </span><span class="syntaxdefault"></span>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!