Autor Beitrag
Maluku Simbali
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.07.15 10:47 
Hallo,

wie kann ich einen string oder utf string am schnellsten parsen ? ich bin noch absoluter rookie ... hier mein vorschlag aber mein lehrer meinte es wäre sehr langsam.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
for indexcount := 1 to length(tempstring) do
begin
 Showmessage(tempstring[indexcount]);
end;


Vielleicht könnt ihr mir weiterhelfen.

Vielen Dank,
Maluku (Masi)
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 17.07.15 10:53 
Was willst du denn machen? Was verstehst du unter "parsen"???

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Maluku Simbali Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.07.15 10:57 
Hi Platzwart,

ich möchte einen String Buchstaben für Buchstaben durchgehen ... es geht darum zu checken wieviele Buchstaben welchen Typs in einem String sind
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Fr 17.07.15 10:59 
Die Pos-Funktion innerhalb der System-Unit von Delphi geht auch so vor, also hat dein Lehrer meiner Meinung nach schon sehr hohe Ansprüche.

Gehst du allerdings pro gesuchten Buchstaben jedesmal durch die for-Schleife, muss ich deinem Lehrer recht geben.
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 17.07.15 11:11 
In diesem Fall würde ich es auch so machen, wie du es geschrieben hast...

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Maluku Simbali Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.07.15 11:20 
Wirklich ? ... ich war mir nicht bewusst dass die Ansprüche so hoch sind. Ist das denn die schnellste Variante einen String char by char durchzugehen bzw. auszulesen ?
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Fr 17.07.15 11:30 
Wenn es für den speziellen Anwendungsfall nicht notwendig wäre komplett Zeichen für Zeichen durch den String zu gehen, aber so wie du deinen Fall beschreibst, fällt mir nichts schnelleres ein.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Fr 17.07.15 11:32 
Meistens kann man noch anderen Stellen optimieren.
Wenn Du z.B. eine Aufstellung machen sollst, wie viele A, wie viele B, wie viele C, usw im Text sind, dann wäre es beispielsweise unglücklich für jeden Buchstaben den Text einmal komplett zu durchlaufen.
Beschreib doch mal die Aufgabe komplett und zeig Deinen Lösungsansatz. Dann kann man schauen, wo man dran drehen kann.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 17.07.15 19:41 
Hallo,

das folgende müsste schon recht schnell sein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
VAR
  Zaehler: Array[byte] of cardinal;
  c: byte;

BEGIN
{... Initialisierung natürlich ....}
FOR index := 1 to length(meinstring) do
  begin
  c :=ord(meinstring[index]);
  Zaehler[c] := Zaehler[c]+1
  end;
END;


Wenn es noch schneller werden soll, dann bietet meinstring[index] Potenzial, aber die Übersichtlichkeit ist dann weg.(meinstring[index] sieht wie ein array aus, aber da das array ja dynamisch verlängert werden kann, muss die Windows-Speicher-Verwaltung den Zugriff managen, jeder Zugriff ist also mit einem Funktionsaufruf verbunden. )

Gruß
GuaAck
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 17.07.15 21:38 
Beachte: Der Code von user profile iconGuaAck funktioniert nur für ASCII (255 Zeichen). Ich bin mir gerade unsicher, wie Delphi mit UTF8 umgeht. Es ginge aber auch ähnlich für mehr als 255 Zeichen (eventuell mit einer Hashtabelle).

Wenn du Zeichen zählen sollst, dann musst du logischerweise alle Zeichen mindestens einmal durchgehen. An der Schleife kommst du da faktisch nicht vorbei.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)