AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buchstaben sortieren aus einem Memofeld

Ein Thema von Fussel9 · begonnen am 24. Aug 2009 · letzter Beitrag vom 27. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 21:39
(A)Hoi,

Ich wollte gerne ein programm schreiben, bei dem man einen Text ein gibt und auf Knopfdruck soll dieser ''Sortiert'' werden, d.h. alle A's alle B's und so weiter sollen hinter ein ander in ein zweites Memofeld geschrieben werden, zuvor soll aber die ausgangsposition der Buchstaben gespeichert werden so das der Text hinterher wieder rekonstuiert werden kann
Beispiel:

Eine Ente geht spatzieren. <----------> aEeEeeeeghiinnnprstttz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 21:41
Und was ist deine Frage?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 21:43
öhm , ja mir fehlt jegweder ansatz gibts ne funktion mit der ich nen memo text nach nem bestimmten Buchstaben dursuchen kann oder mit dem ich irgend wie arbeiten kann???

Für alles offen^^
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 21:44
-Pos()/PosEx()
-StrScan()
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 21:48
Danke schon mal, aber diese Hilfe aus der Delphihilfe ist ein wenig verwirrend , kamm ir jemand ein Beispiel geben?

Zitat:
Syntax


[Delphi] function PosEx(const SubStr: string; const S: string; Offset: Integer): Integer;


Beschreibung
PosEx gibt den Index von SubStr in S zurück, wobei die Suche bei Offset begonnen wird. Wenn Offset 1 ist (Vorgabe), entspricht PosEx Pos.

PosEx gibt 0 zurück, wenn SubStr nicht gefunden wird, Offset größer als die Länge von S ist oder Offset kleiner als 1 ist.

PS: Mit StrScan kann ich leider nicht mein Memo absuchen, da ich die fehlermeldung bekomme:

Inkompatible Typen TString und PAnsiChar, leider konnte ich auch über die Hilfe nicht viel über ein PAnsiChar herrausfinden, was muss ich tun???
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 22:01
p := Pos( 'Du', 'Hallo Du'); ergibt 7, weil das erste Vorkommen vom 1.String an 7. Stelle im 2.String beginnt.

Das PosEx() erweitert das Ganze um eine Offset, ab dem gesucht wird
p := PosEx( 'Du', 'Hallo DuDu!', 8); ergibt also 9.

[Edit: PAnsiChar ist ein Zeiger auf einen String

p := PAnsiChar(<String>); ]
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 22:09
Danke, mal sehn obs geht, sonst meld ich mich nochma
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 22:58
Hmmm du könntest dich vielleicht mit Bucketsort beschäftigen?

Dafür würde ich dann ein zweidimensionales Array nehmen und vorher einen Record typisieren, in der du Zeichen/Position speicherst.
Delphi-Quellcode:
type
  TCharPosArr = record
    CharPosArr : array of TCharPos;
    CharSet : TSysCharSet; // Darin kann man mehrere Zeichen speichern die du dann mit "in" überprüfen kannst
  end;

  TCharPos = record
    C : Char; // Zeichen
    P : Integer; // Position
  end;

var
  CharPos : array [0..25] of TCharPosArr;
Und jetzt musst du zuerst dein Array initialisieren:
Delphi-Quellcode:
CharPos[0].CharSet := ['aAäÄ']; // d.h. alle a/A/ä/Ä werden darein sortiert
CharPos[1].CharSet := ['...'];
Das kannst du natürlich auch in eine Schleife packen (wobei du dann die Umlaute (evtl.) mit beachten musst!).

Und dann gehst du jetzt jedes Zeichen durch und testest, ob das Zeichen zu den erstem zum zweiten etc. passt:
Delphi-Quellcode:
if Str[i] in CharPos[j].CharSet then
begin
  // Einen neuen Eintrag anfügen
  SetLength(...);
  CharPos[High(CharPos)]....
  // Und dann das Gesuche des richtigen "Korbes" abbrechen
  Break;
end;
Ich hoffe das war einigermaßen verständlich.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Buchstaben sortieren aus einem Memofeld

  Alt 24. Aug 2009, 23:35
Hallo,

eine Delphi-Referenz durchsuchenTStringList bietet eigentlich alles, was man zur Lösung dieser Aufgabe benötigt. Die Zeichen können direkt abgelegt werden, ihre Position - als Pointer-Cast - in der Eigenschaft Objects[]. Das Sortieren übernimmt der eingebaute Quicksort-Algorithmus der Stringliste.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Buchstaben sortieren aus einem Memofeld

  Alt 26. Aug 2009, 23:34
Hi, back to the problem...

Ich lasse mein Programm die Eingabe in eine StringList einlesen,
dann setze ich meine zwei dynamischen Arrays auf die Lenge der Eingabe....

wie auch immer... dann lasse ich den Buchstaben in dem einen Array abspeichern
und die Position in dem anderem Array...

mein letztes ''Problem'' besser meine Frage:

Gibt es keine Möglichkeit die Buchstaben nicht alle selbst eingeben zu müssen, gibt es nicht irgendwo ein Alphabet in Delphi welches ich in ne Stringliste einlesen kann oder so? So dass ich später ne for to do nehmen kann also

for i:=0 to Alphabetliste.Count do
begin
Buchstabe:=Alphabetliste[i];
end;

oder zumindest so ähnlich???
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:08 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