AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
Thema durchsuchen
Ansicht
Themen-Optionen

[Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)

Ein Thema von alzaimar · begonnen am 9. Dez 2006 · letzter Beitrag vom 17. Aug 2010
Antwort Antwort
Seite 4 von 8   « Erste     234 56     Letzte »    
alzaimar
Registriert seit: 6. Mai 2005
Hi!
Ich hab mir mal die Mühe gemacht, und eine alternative Explode-Funktion implementiert, die wohl doch etwas schneller ist, als die hier in der Code-Library hinterlegte Version.

Ich möchte Euch bitten, den Code zu testen und auch zu optimieren. Wenn wir damit durch sind, sollte diese Version in die Code-Library übernommen werden, bzw die jetzige Version ersetzen.

Details über die Herleitung (na ja, Recherche und Kopieren ) steht im Code.

[Edit] Unten genannte Tests sowie Zeitmessung eingearbeitet: Es ist ein komplettes Projekt mit Funktions- und Speed-Test. Bitte versucht, Teile davon zu optimieren (ASM, Pointer arithmetic etc.). [/edit]

History:
12.12. Version 1.1: Erste schwere Fehler ausgebaut: Strings am Ende wurden falsch bzw. gar nicht erkannt.
13.12. Version 1.2: Kleiner Fehler in der Prepare-Methode: (Hilfsvariable als Cardinal deklariert, bei Zuweisung <0 ignoriert), Facelifting auf Anregung von Elvis (Feld- und Variablennomenklatur). Ferner ist eine Test-Iterator-Basisklasse sowie ein Iterator für Char-Delimiter (z.B. für CSV) implementiert.
14.12 Version 1.3: Iterator für QS-Search implementier. Die Test-Routine wurde um Zeitmessungen für den Iterator sowie die Code-Library ergänzt.
23.12.07 Version 1.4: Beseitigt seltenen Bereichsüberlauf am Ende eines Strings.

Diese Version ist zwischen 4 und 1000x schneller als die Version aus der Code-Library.
Angehängte Dateien
Dateityp: zip stringdivider_195.zip (219,6 KB, 959x aufgerufen)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
 
grenzgaenger
 
#31
  Alt 23. Feb 2008, 14:59
Zitat von stoxx:
wir haben solche CSV Files nicht
tja, wenn du nicht viel mit CSV arbeitest... dann tut es wohl die funktion auch für dich...
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx
 
#32
  Alt 23. Feb 2008, 15:20
Zitat:
tja, wenn du nicht viel mit CSV arbeitest... dann tut es wohl die funktion auch für dich..
tss .. immer diese, "ich bin wichtiger Mentalität"
man, man ... nein, unsere CSV Files sind sogar größer als Deine. (mehrere 100 MB und ingsesammt soviele dass mehrere Gigabyte verarbeitet werden müssen)

Und der CSV Reader, den wir nun gebastelt haben, ist sehr schick uns wahnsinnig schnell.
Es steht Dir doch frei, die Funktion so zu verändern, wie Du möchtest. Wo liegt Dein Problem?
  Mit Zitat antworten Zitat
Elvis

 
Delphi 2010 Professional
 
#33
  Alt 23. Feb 2008, 15:53
Zitat von stoxx:
Zitat:
tja, wenn du nicht viel mit CSV arbeitest... dann tut es wohl die funktion auch für dich..
tss .. immer diese, "ich bin wichtiger Mentalität"
...
Wo liegt Dein Problem?
Sein Problem ist wohl das von sehr vielen anderen auch: Er wird wohl des öfteren mit (MSFT-) Software zu tun gehabt haben, die behauptet CSV lesen oder schreiben zu können, in Wirklichkeit aber etwas total anderes macht...
Das was du da hast ist nämlich keine Funktion zum Lesen von CSV-Dateien, da diese ein Standard sind, zu dem nunmal auch die Quotes gehören.
Das mag für dich speziell keinen Unterschied machen ( ), da du da vllt nur Zahlen hast.
Aber vllt kannst du das verkniffene Murren von Bernhard nun nachvollziehen?
Robert Giesecke
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx
 
#34
  Alt 23. Feb 2008, 16:07
Aber vllt kannst du das verkniffene Murren von Bernhard nun nachvollziehen? Im Moment noch nicht. Wie ich ihn verstanden habe, sind doch die störenden Zeichen nur Hochkommas am Anfang und Ende eines Strings.
Man würde also einfach mit if prüfen, ob das der Fall ist und ändert die SetString Funktion noch ein bisschen, dann eignet sich die explode Funktion auch zum einlesen solcher CSV Files.

(Die Abkürzung CSV steht für Character Separated Values)

Wenn also noch Hochkommas oder anführungszeichen drin stehen .. und man die nicht haben will. Müssen sie also noch raus. Die CSV Datei kann ja nun nix dafür, dass sie (wahrscheinlich ohne Header) so komisch geschrieben wurde .....
  Mit Zitat antworten Zitat
grenzgaenger
 
#35
  Alt 23. Feb 2008, 17:04
Zitat von stoxx:
Aber vllt kannst du das verkniffene Murren von Bernhard nun nachvollziehen? Im Moment noch nicht. Wie ich ihn verstanden habe, sind doch die störenden Zeichen nur Hochkommas am Anfang und Ende eines Strings.
Man würde also einfach mit if prüfen, ob das der Fall ist und ändert die SetString Funktion noch ein bisschen, dann eignet sich die explode Funktion auch zum einlesen solcher CSV Files.

(Die Abkürzung CSV steht für Character Separated Values)

Wenn also noch Hochkommas oder anführungszeichen drin stehen .. und man die nicht haben will. Müssen sie also noch raus. Die CSV Datei kann ja nun nix dafür, dass sie (wahrscheinlich ohne Header) so komisch geschrieben wurde .....
tzzz, tzz. schicke funktion, für mich total unbrauchbar! deswegen halt ich mich auch mit dem teil nicht auf. BTW CSV steht für comma sepaprated file, im deutschsprachigen raum ist halt dsa comma meist ein semikolon.

die anführungszeichen stöhren mich nicht im geringsten. im gegenteil, die quoten einen textstring. in dessen keine interpretation des delimiters stattfinden darf. falls doch, ist die funktion falsch. der delimiter kann je nach land unterschiedlich sein, z. b. "", '', <>, ><, <<>>, >><<, ...

aber egal, noch 'n schönen tag.
GG

//EDIT: hier noch 'n link zum CSV Format link
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx
 
#36
  Alt 23. Feb 2008, 17:28
Zitat:
die anführungszeichen stöhren mich nicht im geringsten. im gegenteil, die quoten einen textstring. in dessen keine interpretation des delimiters stattfinden darf. falls doch, ist die funktion falsch. der delimiter kann je nach land unterschiedlich sein, z. b. "", '', <>, ><, <<>>, >><<, ...

aber egal, noch 'n schönen tag.
boah ... sowas aggressives .. wer ist Dir denn über die Schuhe gelaufen.
Nein, die Funktion ist natürlich nicht falsch, die macht genau das, was sie tun soll. Einen String trennen, der getrennt ist, durch ein oder mehrere Zeichen! Und wenn alles mit "bla" getrennt ist, tut sie das auch!
Anschauen und ausprobieren würde vielleicht helfen, anstatt rumzumeckern. In der Funktion gibt es überhaupt kein problem, außer dass sie noch um Faktor 2 beschleunigt werden kann, wenn man die rückgabe noch anders gestaltet ...
(mit derselben gewünschten Funktionalität)
Eventuell müsste man die Strings selber erzeugen und die TList hinter TStrings selber befüllen, dass nicht noch einmal speicher kopiert wird, wenn man denn unbedingt TStrings als Rückgabe braucht, geht aber auch anders ...
  Mit Zitat antworten Zitat
Elvis

 
Delphi 2010 Professional
 
#37
  Alt 23. Feb 2008, 17:40
Zitat von stoxx:
boah ... sowas aggressives .. wer ist Dir denn über die Schuhe gelaufen.
Und er benutzt einfach den Avatar von Bernhard Geyer.
Er hat irgendwo schon recht, aber so tut das nicht Not...
Robert Giesecke
  Mit Zitat antworten Zitat
alzaimar

 
Delphi 2007 Enterprise
 
#38
  Alt 23. Feb 2008, 23:26
Zitat von grenzgaenger:
BTW CSV steht für comma sepaprated file, im deutschsprachigen raum ist halt dsa comma meist ein semikolon.
. Genauergesagt handelt es sich um das 'Listentrennzeichen' in den internationalen Systemeinstellungen.
Zitat von grenzgaenger:
...falls doch, ist die funktion falsch. der delimiter kann je nach land unterschiedlich sein, z. b. "", '', <>, ><, <<>>, >><<, ...
Es handelt sich hier nicht um einen CSV-Parser, sondern um einen Ersatz für 'Explode'. Wenn Dir das nicht reicht, dann prüfe nach dem Erkennen des nächsten Strings einfach, ob das Zeichen ein '"' ist. Wenn ja, suchst Du mit meiner FastPos-Routine das nächste '"', stellst sicher, das es nicht escpaped ist (hua, was für ein Deutsch), und extrahierst dann.

Aber nochmal. Niemand hat behauptet, das die csExplode-Routine mit CSV klar kommt, also hört auf mit euren Zickereien. Man kommt sich ja vor wie auf einem Mädcheninternat.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx
 
#39
  Alt 24. Feb 2008, 12:45
In einer QSearch-Version war der Fehlerteufel drin. Ich hoffe, das das bei der hier nicht der Fall ist. die korrigierte Variante von QPosEX in Pascal und nicht ASM würde mich äußerst stark interessieren
Wäre das möglich? .. Vielen Dank !


(Function QPosEx(SearchFor, SearchIn: String; Start: integer): integer
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#40
  Alt 24. Feb 2008, 12:46
Zitat:
enn Dir das nicht reicht, dann prüfe nach dem Erkennen des nächsten Strings einfach, ob das Zeichen ein '"' ist
Es währe aber trozdem Toll wenn die Funktion das unterstützen könnte. Das muss ja nix mit CSV zu tun haben.
Sowas brauche ich gelegendlich mal. Darum habe ich mir eine eigne Funktion dafür geschrieben. Die aber wahrscheinlich viel langsamer ist als deine....

Evlt. teste ich mal deine Funktion unter Lazarus. Weil ich gerne Texte Parse die so aufgebaut sind:
<fg="wert">text</fg>
Im Moment mache ich das mit Pos und PosExt....

Aber wenn das deine Funktion schneller kann, könnte ich ja mal schauen ob ich darauf umsteigen kann.
Michael Springwald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 8   « Erste     234 56     Letzte »    


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz