AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anzahl eines Zeichens im String ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl eines Zeichens im String ermitteln

Ein Thema von DevidEspenschied · begonnen am 27. Jun 2008 · letzter Beitrag vom 17. Jul 2018
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 08:31
Wenn es wirklich auf die Performance ankommt, blieben noch spezielle CPU Instruktionen wie repne scasb bzw. repne scasw. Die habe ich auch schon benutzt, aber das macht nur Sinn, wenn es wirklich Not tut. Eben wegen Portabilität usw.
Ich hatte gestern da versucht was zu bauen und hatte am Ende wirklich einen sehr kurzen und schnell aussehenden Code mit scasw usw. Aber im Benchmark von KodeZwerg wars trotzdem nur auf dem 2. Platz, weswegen ich nichts gepostet hatte.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.513 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 08:53
Wegen Portabilität und so: Ihr berücksichtigt keine Unicode Surrogate-Paare.
Und zu den Assembler Varianten: geht das auch auf 64-Bit?

Und wem die primitiv-Variane zu langsam ist sollte erst mal prüfen warum man die Suche überhaupt braucht. Die zu vermeiden ist meist der wesentlich schnellere Weg. In der Regel ist der aufrufende Code sch...licht verbesserungswürdig.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 09:20
Wegen Portabilität und so: Ihr berücksichtigt keine Unicode Surrogate-Paare.
Funktioniert das was Du schreibst auch nicht mit der Variante aus Post #30 ? (AnsiChar sucht in AnsiString)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.754 Beiträge
 
Delphi 12 Athens
 
#4

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 12:28
sollte erst mal prüfen warum man die Suche überhaupt braucht. Die zu vermeiden ist meist der wesentlich schnellere Weg.
Hier z.B. ein Helper für TTextReader zum korrekten Einlesen einer CSV-Datei, bei der innerhalb der gequoteten Felder Zeilenumbrüche vorkommen.
Delphi-Quellcode:
function TTextReaderHelper.ReadQuotedLine(QuoteChar: Char): string;
var
  line: string;
begin
  Result := ReadLine;
  if Odd(Result.CountChar(QuoteChar)) then begin
    { Eine ungerade Anzahl von Quotes bedeutet, daß der gequotete String mindestens einen Zeilenumbruch enthält.
      Wir hängen also die nachfolgenden Zeilen mit LineBreak an, bis eine weitere Zeile mit ungerader Anzahl
      Quotes kommt.
    }

    repeat
      Result := Result + sLineBreak;
      line := ReadLine;
      Result := Result + line;
    until Odd(line.CountChar(QuoteChar));
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 12:49
Neutral General, Danke für Deinen Post, bei mir leider auch gleich eine EA.
Falls wer mag, habe den Benchmark etwas umgestaltet.
Nun führt der zwei Tests durch, einmal mit RandomString() und einmal mit RandomByte().
Sprich, einmal sind es nur lesbare ASCII Zeichen beim zweiten Test ist ein 00-FF Byte möglich.
Um lokale Schwankungen zu minimieren bzw. in dieser Test-Art besser Auszugleichen habe ich einfach den Daten Anteil auf 50MB erhöht.
Danke EgonHugeist, Deine Variante ist auch enthalten.

Im Anhang Projekt-Source plus Kompilat zum gleich Testen.
Angehängte Dateien
Dateityp: 7z Benchmark.7z (192,4 KB, 7x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 13:04
Das verstehe ich nicht. Kannst du mal bitte zeigen wie du meine Funktion aufgerufen hast?
Bei mir läuft alles ohne Probleme (Sowohl mit Release als auch Debug Konfiguration, 32-Bit, Windows 10)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 13:16
Ich habs so wie Du geschrieben hast verwendet. Siehe hier: Screenshot - 13_07.jpg
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 13:23
Ist das die Version mit oder ohne cld?
Welche Windows/Delphi Version,welche Konfiguration?
Würde echt gerne wissen wo es da kracht. Ich sehe da eigentlich keine problematische Stelle.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.754 Beiträge
 
Delphi 12 Athens
 
#9

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 13:28
Das verstehe ich nicht. Kannst du mal bitte zeigen wie du meine Funktion aufgerufen hast?
Bei mir läuft alles ohne Probleme (Sowohl mit Release als auch Debug Konfiguration, 32-Bit, Windows 10)
Der Fehler kommt hier auch, wenn ich die Optimierung einschalte. Der Debugger bleibt dann bei dem repnz Befehl stehen.

Mit abgeschalteter Optimierung brauchen die Pascal-Funktionen aber deutlich länger. Wobei sich dann wieder die Verwendung der internen Funktionen (StrScan oder string.CountChar) bezahlt macht, da die von dem Schalter nicht betroffen sind.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.754 Beiträge
 
Delphi 12 Athens
 
#10

AW: Anzahl eines Zeichens im String ermitteln

  Alt 13. Jul 2018, 13:30
Ach ja, statt Randomize verwende ich RandSeed := 0;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz