Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Coding Releases > Coding Snippets
You last visited: Today at 01:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[PHP]stringBetween Funktion

Discussion on [PHP]stringBetween Funktion within the Coding Snippets forum part of the Coding Releases category.

Reply
 
Old 02/18/2014, 15:46   #16
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by MrSm!th View Post
@FlutterShy
Nur dass es hier nicht um AutoIt geht.
Ich kann auf meinem pc im moment keinen vergleich von 2 php funktionen machen aber RegEx ist besser

Quote:
Originally Posted by Mostey View Post
....
1.)In autoit bin ich es gewohnt alles so zu programmieren das es möglichst schnell ausgeführt wird weils einfach langsam ist.

2.)User requestet deine php seite. Dann führt php Stringbetween aus und gibt das aus und da entsteht die ladezeit oder ?
YatoDev is offline  
Old 02/18/2014, 16:41   #17


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by »FlutterShy™ View Post
Ich kann auf meinem pc im moment keinen vergleich von 2 php funktionen machen aber RegEx ist besser



1.)In autoit bin ich es gewohnt alles so zu programmieren das es möglichst schnell ausgeführt wird weils einfach langsam ist.

2.)User requestet deine php seite. Dann führt php Stringbetween aus und gibt das aus und da entsteht die ladezeit oder ?
Du hast meinen Post nicht verstanden, man kann dies trotzdem so implementieren, das der Aufruf dieser Funktion nicht einmal vom User bemerkt wird.
Mostey is offline  
Old 02/18/2014, 17:50   #18
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Quote:
Originally Posted by Mostey View Post
Es geht hier aber sicher nicht um ein paar Millionen Zeichen. Das dürfte ja klar sein das es sich dann um viele Sekunden handelt die das Programm / die Anwendung ausbremsen und sich dann RegEx natürlich mehr rentiert wenn dieser Text sehr oft behandelt werden muss.

Aber wie wäre es, wenn man mal etwas realistischer denkt? Wann hat man schon so eine große Masse zu vergleichen? Hier ist nicht mal ein richtiger Kontext gegeben.

Ob ich jetzt ein mal 500 ms warten muss oder 2ms. So lange es ein mal vorkommt ist es kein Thema. Ich bleibe dabei und muss mir sicher nicht von dir sagen lassen, das ich aufgrund meiner Meinung nicht das tun soll, was ich möchte.
Wenn du vier solcher Stellen auf einer Seite hast musst du schon zwei Sekunden warten.

Fassen wir also zusammen:
* Dein Quelltext ist fehleranfälliger. Am Anfang hast du die Rückgabe von strpos() dadurch validiert, ob es ungleich -1 ist. Das war falsch, da strpos() wenn es nichts findet "false" zurück gibt. Dein jetzige Version ist aber noch immer falsch, da du nur den Wert und nicht den Typ vergleichst. Du behandelst also den Fall "nicht gefunden" und "an Position 0 gefunden" gleich, das geht nicht.

* Du schreibst viel(!) mehr Quelltext: Anstatt einer Zeile siehst du acht Zeilen als übersichtlicher beziehungsweise sauberer an. Dabei sind diese acht Zeilen sicherlich ebenso komplex wie ein Regexp mit gleicher Funktion.

* Noch einmal zum Thema Fehleranfälligkeit und Übersichtlichkeit: Ich muss immer etwas überlegen, ob ich bei einer Positiom / einer Länge im String jetzt noch 1 dazu oder abziehen (oder gar nichts tun) muss. Ist das bei euch nie der Fall?

* Deine Variante ist um Faktor 325 langsamer (in der Zeit, in der dein Algorithmus also 460 Wörterbucheinträge bearbeitet hätte hätte die Regexp Variante den ganzen Duden durch)

* Deswegen ist das mögliche Einsatzgebiet stark beschränkt (keine größere Datenmenge, kein low-level Code der öfters aufgerufen wird, ...)

* Das alles ist aber völlig i.O, weil wie oben beschrieben, acht fehleranfällige Zeilen viel einfacher zu verstehen sind als ein sechs Zeichen Regexp.

Mkay. Hast du schonmal über einen beruflichen Werdegang bei Sun nachgedacht? Die Typen die die Java-API schreiben brauchen Leute wie dich!

Ich schlage dann grundsätzlich immer zwei Versionen der Methoden vor:

* eqauls_normal()
* equals_slowAndLongButKindaEasyToUnderstand()
dowhile is offline  
Thanks
2 Users
Old 02/18/2014, 18:49   #19


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by dowhile View Post
Wenn du vier solcher Stellen auf einer Seite hast musst du schon zwei Sekunden warten.
Na dann nenn mir mal Beispiele in denen in ich 54,6 Millionen Zeichen (!!!!) durchsuchen muss. Und vor allem gehst du bitte nicht davon aus, das wenn es sich immer um den gleichen Text handelt der selbe Text immer wieder neu durchsucht wird.


Quote:
Originally Posted by dowhile View Post
* Dein Quelltext ist fehleranfälliger. Am Anfang hast du die Rückgabe von strpos() dadurch validiert, ob es ungleich -1 ist. Das war falsch, da strpos() wenn es nichts findet "false" zurück gibt. Dein jetzige Version ist aber noch immer falsch, da du nur den Wert und nicht den Typ vergleichst. Du behandelst also den Fall "nicht gefunden" und "an Position 0 gefunden" gleich, das geht nicht.
Ich habe den Code nicht geschrieben, wende dich dazu bitte an denjenigen, der den Code hier veröffentlicht hat. Außerdem kann man diese Defizite leicht beseitigen.

Quote:
Originally Posted by dowhile View Post
* Du schreibst viel(!) mehr Quelltext: Anstatt einer Zeile siehst du acht Zeilen als übersichtlicher beziehungsweise sauberer an. Dabei sind diese acht Zeilen sicherlich ebenso komplex wie ein Regexp mit gleicher Funktion.
Ich muss ja schon sagen, 7 Zeilen mehr sind natürlich sehr viel. Man bedenke, das du die Funktion so oder so nur einmal schreibst. Daher spielt diese Funktion in der Übersichtlichkeit eine große Rolle, da selbst Programmierer die keine Erfahrung mit regulären Ausdrücken haben, prima verfolgen können, was diese Funktion genau tut.


Quote:
Originally Posted by dowhile View Post
* Noch einmal zum Thema Fehleranfälligkeit und Übersichtlichkeit: Ich muss immer etwas überlegen, ob ich bei einer Positiom / einer Länge im String jetzt noch 1 dazu oder abziehen (oder gar nichts tun) muss. Ist das bei euch nie der Fall?
Und ich verweise noch einmal darauf, das ich den Code nicht verfasst habe. Das ist aber (wie dein anderes Argument auch) nichts, was nicht behoben werden kann.

Quote:
Originally Posted by dowhile View Post
* Deine Variante ist um Faktor 325 langsamer (in der Zeit, in der dein Algorithmus also 460 Wörterbucheinträge bearbeitet hätte hätte die Regexp Variante den ganzen Duden durch)
6500 char Strings * 2100 Stellen im Text in denen genannte Größe vorkommt: 13.650.000 Zeichen. Dafür braucht die Funktion 450 ms, aufgerundet auf 0,5 Sekunden.

Ein Duden hat ungefähr (je nach Auflage verschieden) ~50.000 Wörter. Nimmt man jetzt einen Durchschnitt von 6 Zeichen pro Wort, kommen wir auf 300.000. Also könnte man sagen, ein Duden ist 300.000 Zeichen groß. Eine Suche nach Dieser Anzahl an Zeichen dauert dementsprechend ~68ms.

Du hast mit deiner Aussage wahrscheinlich Recht aber ob die Durchsuchung nun 0,2ms oder 0,68ms dauert ist total egal, WENN es sich um einmalige Verwendung und nicht stumpfes loopen handelt.

Quote:
Originally Posted by dowhile View Post
* Deswegen ist das mögliche Einsatzgebiet stark beschränkt (keine größere Datenmenge, kein low-level Code der öfters aufgerufen wird, ...)
Ergibt keinen Sinn, spezifiziere das bitte.


Quote:
Originally Posted by dowhile View Post
Mkay. Hast du schonmal über einen beruflichen Werdegang bei Sun nachgedacht? Die Typen die die Java-API schreiben brauchen Leute wie dich!

Ich schlage dann grundsätzlich immer zwei Versionen der Methoden vor:

* eqauls_normal()
* equals_slowAndLongButKindaEasyToUnderstand()
Natürlich war die erste Aussage vollkommen überflüssig, darauf gehe ich deshalb erst gar nicht ein.

Ich schlage dann auch mal grundsätzlich zwei Versionen von Methoden vor:

equals_\s\w+[^0-2]-)\r[a-Zz-A]*[ + "s"()

und

string_between(str1, str2);


Ich weise übrigens nochmal darauf hin das es hier um die einmalige Verwendung (bzw. im kleineren Kontext) dieser Funktion geht. Nicht in denen, in der durch 50 Millionen Zeichen über eine Endlosschleife gelooped werden muss.
Mostey is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Winhttp Stringbetween
10/23/2013 - AutoIt - 3 Replies
Hey, ich möchte vom quelltext die value rausnehmen. Jedoch gibt es mehrere values diese auch unterschiedlich sind. Darum brauche ich den teil vor value = auch aber in diesen teil sind " drinnen. Und wenn ich das einfüge in Autoit schließt sich das ja wieder weil da dann zwei " sind
[S] USA.net E-mail Spammer (Proxy Funktion & Account-listen Abruf Funktion) [B] e*g
04/24/2013 - elite*gold Trading - 0 Replies
Hallo, Ich Suche einen E-mail Spammbot der mit USA.net E-mail Adressen Arbeitet. den SMTP Herrauszufinden ist ja nicht Wirklich schwer. Er Sollte Proxy Funktionen haben (E-mail via Proxy versenden) Und er sollte eine liste mit Accounts (Format E-mail:Passwort) Einlesen und verwenden Können (Wenn eine E-mail nichtsmehr sendet wird eine 2te Genommen Also aus der Liste) Hoffe ihr könnt mir da Weiterhelfen ^^ Kontakt Bitte per PN.
Hilfe bei Send Funktion mit Stop Funktion
04/02/2011 - AutoIt - 11 Replies
Hallo Elitepvpers ich habe ein Problem und Mein Problem ist das mein Text einfach weiter schreibt wenn ich mit HotKey verwende... gib es keine Funktion das der Text einmal kommt und nicht wenn man einmal die HotKey das er 10 min das selbe schreibt :confused:
StringBetween --- Problem-Need Help ^^
11/14/2010 - AutoIt - 20 Replies
Wie der Titel schon sagt geht es um _StringBetween(denke ich) Hier der Code: Func _firefoxrid() _FFStart(GUICtrlRead($input3)) WinSetState ( "MozillaFirefox", "", @SW_MINIMIZE ) $sHTML = _FFReadHTML("html",16) $rid = _StringBetween($sHTML, "var rid = '", "';") _FFWindowSelect( "", "label") Local $time1= _StringBetween($sHTML, 'new product('&GUICtrlRead($Input2), 'nbsp') ;$time2= StringRight($time1, 8)
Auch ein StringBetween Problem..
11/08/2010 - AutoIt - 16 Replies
also habe untenstehenden code... und es kommt immer der fehler: Subscript used with non array varriable. woran könnte es liegen^^ die youtube seite ist eig geöffnet und bei nem andren code hat genau das gefunzt.. alle includes sind eig gemacht... weis es net^^ sagt wenn ihr mehr infos braucht^^



All times are GMT +2. The time now is 01:10.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.