AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Leerzeichen in String einfügen

Ein Thema von majornudelholz · begonnen am 26. Jan 2016 · letzter Beitrag vom 2. Feb 2016
Antwort Antwort
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 04:33
Guten Morgen,

wollte Dejan Vu's produktiven Worten eigentlich den Vortritt beim Abschluß dieses Threads lassen. Doch:

@Dejan Vu
Ich habe hierbei auch etwas gelernt:
Code:
    if (Pointer(Result) = nil) or //result unassigned?
       (PLongInt(NativeUInt(Result) - SizeOf(LongInt))^ <> SrcLen) {PStrRec.Len} or //length different?
       (PLongInt(NativeUInt(Result) - (SizeOf(LongInt) shl 1))^ <> 1) {PStrRec.RefCnt} then //no unique string?
      SetLength(Result,SrcLen+((SrcLen-1) shr 2));
Für hoch performante String functions war ich es gewohnt erst den String-Refcount und die Länge zu testen, bevor ich ein SetLength() calle. Die älteren IDE's haben in jedem Falle einen neuen Unique-String erzeugt. Nun scheint mir das dieser Test schon implizit dem SetLength drin ist. Oder baut das der Compiler neuerdings direkt ein? Das war nicht immer so, und gilt herauszufinden, seit welcher Version sich Delphi so verhält. Klar ich spare den Call aber der Code wird unleserlich und für jemanden, der davon keine Ahnung hat, völlig banane.
Nu kuck ... muß meine gewohnte low-Level Syntax nun doch nicht in Frage stellen. Mir fällt's gerade wie Schuppen von den Augen:
Ich vergleiche hier die Result-Länge mit der Source-Länge. Na sooo wird dad doch auch nix!

Also ... habe ich die Unit nochmals angehängt. Es kitzelt doch noch einige Ticks raus:

Zitat von Benchmarks:
Task: Fuege einen "_" -Char an jeder 4. Stelle ein!
Benchmarking DupeString('xyz', 1 shl^0..10) Iterations: 2000000:

Autor: "Mavarik" Function: "MavarikQuadUnderScoreInjector" TickCount: 9688
Autor: "Dejan Vu" Function: "DejanVuQuadUnderScoreInjector" TickCount: 575078
Autor: "EgonHugeist" Function: "leerzeichen" TickCount: 3500
Autor: "Sir Rufo" Function: "StrInsertEveryNthPos" TickCount: 85328
Autor: "EgonHugeist" Function: "EH_QuadUnderScoreInjectorBy4" TickCount: 3313
Autor: "EgonHugeist" Function: "EH_QuadUnderScoreInjectorBy8" TickCount: 3250

Task: Fuege einen "/\"-String an jeder 4. Stelle ein!
Benchmarking DupeString('xyz', 1 shl^0..10) Iterations: 2000000:

Autor: "Sir Rufo" Function: "StrInsertEveryNthPos" TickCount: 139406
Autor: "EgonHugeist" Function: "EH_StrInsertEveryNthPos" TickCount: 25422
From my POV ... case closed.

PS. @Mavarik das div 4 braucht ca. 10 Zyklen, wärend ein shr 2 einen braucht.. Ist der Hauptunterschied zwischen "Leerzeichen" und "EH_QuadUnderScoreInjectorBy4"..
Angehängte Dateien
Dateityp: pas QuadUnderScoreInjections.pas (10,8 KB, 4x aufgerufen)

Geändert von EgonHugeist (30. Jan 2016 um 05:23 Uhr) Grund: typo
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 06:11
Ich habe mir jetzt nicht alle Lösungen angeguckt. Vielleicht ist meine Idee schon dabei: Ausgangszeichenkette in Vierer-Blöcke aufsplitten und beim Zusammensetzen die Leerzeichen einfügen.

Vielleicht auch nicht am schnellsten, aber sehr anschaulich, was passiert, denke ich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 06:31
Hallo Michael,

klingt gut! Wäre schön, wenn du es in Zeilen ausdrückst. Kann nur neue Perspektiven aufzeigen, man lernt nie aus! Würde mich freuen..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 06:34
Öhm. Ich weiß gar nicht, ob mein BDS 2006 noch startet oder ob ich da erst Staub putzen muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 06:42
Wäre schön, wenn du den Staubwedel holst.

Ich hatte einen ähnlichen Ansatz verfolgt, habe ihn wieder nach 10min verworfen, drum würde es mich freuen, wenn du die Zeit findest. Just4Fun

Geändert von EgonHugeist (30. Jan 2016 um 06:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 06:47
I'll do my very best, Mrs Sophy Mr Hugeist.

Warum hast du ihn wieder verworfen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EgonHugeist

Registriert seit: 17. Sep 2011
187 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Leerzeichen in String einfügen

  Alt 30. Jan 2016, 07:05
Cheers Mr Pommeroy! Mr Luckie

Well ... das genaue aufteilen in die 4er Teile des Strings und deren Positions-Alignments haben mir zu lange gedauert.

Da der String "xyz" oder "1234567890", riesßig, oder, oder sein kann, waren die langsamen Modulo's für das Alignen der PChars gefragt etc.
Wäh that kills a cat! (Er trinkt aus der Blumenvase)
And last but not least -> Mein code wäre vom Style wieder für den unerfahrenen nicht zum Verstehen gewesen. Also hab ich's bei den 3 Versionen belassen.

Vielleicht hab ich mich auch einfach zu dusselig angestellt. K.A. drum mach einfach mal, laß dich nicht beeinflußen, wenn du die Zeit findest.

Geändert von EgonHugeist (30. Jan 2016 um 07:14 Uhr) Grund: syntax
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:33 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