Entwickler-Ecke

Sonstiges (Delphi) - Wortsortierer


ForgottenDeath - So 08.02.09 20:18
Titel: Wortsortierer
1. Ziel Wortsortierer
Auf einer Webseite (PHP) bzw. dem Desktop (Delphi) soll ein beliebiger Text eingegeben werden. Das Programm soll alle Worte dieses Textes einlesen und alle Buchstaben in Kleinbuchstaben verwandeln. Danach sollen die Worte sortiert und wieder ausgegeben werden. Interpunktionen und Zahlen werden dabei ignoriert. Die Ausgabe soll dabei nach den beiden Anfangsbuchstaben der Worte gruppiert werden. Innerhalb dieser Gruppen erfolgt die Ausgabe in umgekehrter alphanumerischer Reihenfolge. Doppelte Worte werden nur einmal mit der Häufigkeit ihres Auftretens ausgegeben.

2. Verlauf
Der Text soll in ein mehrzeiliges Eingabefeld eingegeben werden. Nach Bestätigung durch den Benutzer wird der Text vom Programm verarbeitet. Das Ergebnis muß in geeigneter Weise ausgegeben werden.

3. Abgabe
Das Programm soll in Delphi geschrieben werden.

4. Abzugeben sind
Unter Delphi: fertig kompiliertes Programm

Hat jmd ne Ahnung? das geht leider über meinen geringen Erfahrungsschatz in Delphi....

Moderiert von user profile iconNarses: Beitragsformatierung überarbeitet.


jaenicke - So 08.02.09 20:23

Hallo und :welcome: !

Hast du denn einmal angefangen? Wo kommst du nicht weiter?

Wie sollen wir dir denn helfen, wenn du nichts zeigst was du bisher hast? Was erwartest du also als Antwort?

Stichworte wären z.B. LowerCase und zur Speicherung der Wörter z.B. TStringList.


ForgottenDeath - So 08.02.09 20:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
unit gate;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
var

  StringList: TStringList;

  StringList := TStringList.Create;

   StringList.LoadFromFile('http://www.haus-perthen.de/gateprotect.txt');

  StringList.Sort;
  ShowMessage(StringList.Text);
  StringList.Free;
end;

implementation

{$R *.DFM}

end.

soweit bin ich aber irg weiß ich nicht weiter
habe delphi vor ca 2-3 jahren das letzte mal genutzt und habe sehr wenig ahnung

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Webo - So 08.02.09 20:52

Wichtig ist erstmal, dass du dir im Klaren bist, wie du dein Vorhaben logisch, mal ganz ab von der Programmiererei, lösen würdest (z.B. Ich durchsuche den Text nach "...") .
Überleg dir:
- Wie könnte man möglichst einfach nur kleine Buchstaben "erlauben" ? Wie user profile iconjaenicke schon ansprach: Stichpunkt LowerCase
- Nach was sortiere ich und wie sortiere ich ( besonders erstes habe ich noch nicht kapiert, was du tun willst) ?
- Wie lasse ich Zahlen weg ?
... etc.

Wenn du dann ein Konzept hast, dann fragst du dich, wie man das in Delphi realisieren könnte, wobei du da natürlich Hilfe bekommst, wenn du nach außen hin zeigst, dass du dir Gedanken gemacht hast und nicht einfach andere für dich arbeiten lässt.

Grüße

Webo


jaenicke - So 08.02.09 20:52

Du sollst den Text doch gar nicht aus einer Datei laden, den hast du ja in einem Eingabefeld auf dem Formular.

Vorgehensweise könnte bspw. ungefähr so sein:


ForgottenDeath - So 08.02.09 21:26

mh... wie könnte sowas ca aussehen?:S bin echt überfordert


jaenicke - So 08.02.09 21:29

Fang doch einfach mal an. Erstell ein neues Projekt, lege ein TMemo und einen TButton drauf, dann klick doppelt auf den Button und deklariere in der ButtonClick Prozedur eine String-Variable. Dann legst du da den Inhalt deines Memos rein, wandelst den Text dabei mit LowerCase in Kleinbuchstaben um, ...

Danach brauchst du Schleifen, kennst du for- und while-Schleifen?


ForgottenDeath - So 08.02.09 21:32

mh.. for und while... ist sehr lange her dass ich davon gehört habe... while kann ich mir vorstellen dass etwas im selben augenblick passieren soll oder so ähnlich


Webo - So 08.02.09 21:40


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for i := 0 to Anzahlwasauchimmer do
begin

...

end;


while i < Anzahlwasauchimmer do
begin

...

end;


Das erste nutzt man immer, wenn etwas raufgezählt werden soll, z.B. den Wort oder Zeilenindex. Das zweite, wie du schon sagtest, solange diese Bedingung erfüllt ist.

Wenn du nicht mehr die Grundlagen drin hast, schau dir doch einfach nochmal nen Crashkurs an.


ForgottenDeath - So 08.02.09 22:07

danke! ich werds mal probiern wie weit ich komme


jaenicke - So 08.02.09 22:27

Ja, wenn du das mit Schleifen schon nicht mehr weißt, dann musst du dir das erstmal anschauen.

Als Crashkurs wie von user profile iconWebo angesprochen empfehle ich z.B. den:
http://crashkurs.christian-stelzmann.de


ForgottenDeath - Mo 09.02.09 16:44

mh... sorry aber wie legt man einen Text aus dem Eingabefeld in einen string und gleichzeitig (mit whileschleife?) in einen lowercase?


jaenicke - Mo 09.02.09 17:20

Du nimmst den Text aus dem Eingabefeld, übergibst den an LowerCase und das gibt dir den in Kleinbuchstaben zurück. Das kommt dann in deine Stringvariable.

Delphi-Quelltext
1:
DeinString := LowerCase(MemoX.Text);                    


ForgottenDeath - Mo 09.02.09 17:31


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private

    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 StringList.LoadFromFile('http://www.haus-perthen.de/gateprotect.txt')
 StringList.Sort;
  ShowMessage(StringList.Text); // Resultat: "Apfel Birne Kiwi"
  StringList.Free;
  Stringlist := LowerCase(Memo1.Text); // Resultat: Kleinschreibung

end;

end.
soweit hab ichs jetzt

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt


ForgottenDeath - Mo 09.02.09 21:38

weiß ehrlich gerade nicht weiter und verzweifel gerade ^^ eig ist delphi ned mein programm und das muss bis mogen fertig sein... zum glück bis morgen abend
er erkennt den befehl stringlist irg leider nicht
kann jmd mir helfen?


LexXis - Mo 09.02.09 23:19

Du gibtst deine Stringlist ja auch per Stringlist.Free; frei. Außer dem willst du ja nicht auf die Stringlist zugreifen, sondern auf deren Text
:arrow: Stringlist.Text

Quelltext
1:
 := LowerCase(Memo1.Text)                    


jaenicke - Mo 09.02.09 23:22

Es fehlt vor allem die Deklaration der Variable StringList als Typ TStringList und die Erzeugung. Die Variable war oben aber schon mal da.

Ohne die Grundlagen hat das aber keinen Sinn, was soll ich da noch zu sagen. Crashkurs, anderweitige Suche im Internet und vor allem ausprobieren. Alles vorgekaut zu bekommen funktioniert beim Programmieren nicht. :nixweiss:


ForgottenDeath - Mo 09.02.09 23:27

mh.. er erkennt den befehl stringlist.loadfromfile leider nicht:S habe den allerdings aus dem Web

außerdem meint er dass ich überall Semikolons setzen soll
kann es sein dass ich welche vergessen habe?


ForgottenDeath - Mo 09.02.09 23:28

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es fehlt vor allem die Deklaration der Variable StringList als Typ TStringList und die Erzeugung. Die Variable war oben aber schon mal da.

Ohne die Grundlagen hat das aber keinen Sinn, was soll ich da noch zu sagen. Crashkurs, anderweitige Suche im Internet und vor allem ausprobieren. Alles vorgekaut zu bekommen funktioniert beim Programmieren nicht. :nixweiss:


ich versuch mich da gerade durchzubeißen, weil ich einen ausbildungsplatz haben will und danach werd ich wahrscheinlich nie wieder auf delphi treffen
von daher setz ich mich da ran


jaenicke - Mo 09.02.09 23:32

user profile iconForgottenDeath hat folgendes geschrieben Zum zitierten Posting springen:
mh.. er erkennt den befehl stringlist.loadfromfile leider nicht:S habe den allerdings aus dem Web
Aber StringList ist jetzt deklariert? Weil wenn das nicht als TStringList deklariert ist, dann kann er den Befehl auch nicht kennen. Du musst immer den ersten Fehler zuerst beheben, das war, dass er StringList nicht kennt.

user profile iconForgottenDeath hat folgendes geschrieben Zum zitierten Posting springen:
außerdem meint er dass ich überall Semikolons setzen soll
kann es sein dass ich welche vergessen habe?
Am Ende von LoadFromFile, ja.


Boldar - Mo 09.02.09 23:34

da gabs glaube ich auch mal

Delphi-Quelltext
1:
stringlist.sorted := true                    

damit ist auch das sortieren einfach, aber dein Lehrer erwartet wahrscheinlich was anderes...


jaenicke - Mo 09.02.09 23:36

Erstmal muss der Text in Worte getrennt und diese gezählt werden, das Sortieren kann man dann immer noch machen. Funktionieren sollte es aber so.


ForgottenDeath - Mo 09.02.09 23:36


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; StringList: TStringList;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 StringList.LoadFromFile ('http://www.haus-perthen.de/gateprotect.txt') ;
 StringList.Sort;
  ShowMessage(StringList.Text); //
  StringList.Free;
  Stringlist.Text := LowerCase(Memo1.Text); // Resultat: Kleinschreibung

end;

end.



soweit habe ich es nun
und habe es wenigstens schonmal soweit geschafft dass es startet ( JUHU xD) aber er zeigt mir dann folgendes an:

"Im Projekt Projekt 1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: "Zugriffsverletzung bei Adresse 00444D4C im Modul "Projekt 1 exe " Lesen von Adresse 00000000. Prozess wurde angehalten Mit Einzelne Anweisung oder Start fortsetzen."




Fehlt da irgendwas?


jaenicke - Mo 09.02.09 23:39

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es fehlt vor allem die Deklaration der Variable StringList als Typ TStringList und die Erzeugung.
Das hattest du vorhin [http://www.delphi-forum.de/viewtopic.php?p=548555#548555] auch schon drin.

Nebenbei: Eine Datei aus dem Internet kannst du so nicht laden.


ForgottenDeath - Mo 09.02.09 23:42

wlechen befehl muss ich denn nutzen damit er ausm internet was läd?

war gerade auf der suche nach nem ausgabefenster, was ich ja nicht habe, was kann man dazu verwenden? richedit?


jaenicke - Di 10.02.09 01:21

user profile iconForgottenDeath hat folgendes geschrieben Zum zitierten Posting springen:
wlechen befehl muss ich denn nutzen damit er ausm internet was läd?
Das hat doch überhaupt nichts mit der Aufgabenstellung zu tun?!? :gruebel:
(Stichwort TIdHttp + Get wäre eine Möglichkeit.)

user profile iconForgottenDeath hat folgendes geschrieben Zum zitierten Posting springen:
war gerade auf der suche nach nem ausgabefenster, was ich ja nicht habe, was kann man dazu verwenden? richedit?
TMemo reicht auch, der Unterschied ist, dass man in TRichEdit den Text auch zeichengenau formatieren kann, etc.


Webo - Di 10.02.09 14:16

Du musst die Datei erst runterladen lassen und dann öffnen, was, wie angesprochen, aber nix mehr mit deiner Frage zu tun hat. Nutze dazu mal die Suche hier im Forum, sie wird dir Aufschluss geben.

Und warum willst du überhaupt ne txt-Datei runterladen - Du sprachst davon, dass der Text eingegeben wird, also in Delphi in ein Feld eingetippt werden soll ?!

Wenn du aber schon nicht weist, wie Schleifen funktionieren und dann direkt mit Komponenten, die was runterladen sollen, arbeitest, solltest du dir über dein Konzept in Zusammenhang mit deinen Kenntnissen mal Gedanken machen und einen Crashkurs & Tutorials "besuchen".

PS: Programmiersprachen ähneln sich (nicht nur leicht), also gilt dein Argument, Delphi brauch ich nicht mehr lang, nicht wirklich ;-)


ffgorcky - So 17.05.09 10:10

Also hast Du jetzt die StringList deklariert?
Entweder unter der

Delphi-Quelltext
1:
Prozedur TForm1.Button1Click(Sender: TObject);                    

zwischen dem Namen und begin mittels var davor
oder unter

Delphi-Quelltext
1:
2:
 private
    { Private-Deklarationen }

...je nachdem, ob Du die noch in einer anderen Prozedur brauchst?
Wenn Du sie nur in der einen Prozedur zur derzeitigen Verarbeitung brauchst, dann ist es besser, sie auch dort zu deklarieren.


oldmax - Di 19.05.09 06:33

Hi
Sorry, wenn ich eure Geduld bewundere. Da hat einer vor Jahren mal was vo Delphi gehört und muß nun eine Hausaufgabe machen......
Ich glaub, da verarscht euch einer gewaltig.
Gruß oldmax


jaenicke - Di 19.05.09 13:02

user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
Also hast Du jetzt die StringList deklariert?
Deklariert ist sie ja auch im letzten Quelltext, die Erzeugung fehlt, wie ich ja auch sagte.
user profile iconForgottenDeath hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
var
  Form1: TForm1; StringList: TStringList;
Und da keine weitere Antwort kam, nehme ich an, dass das Problem mit dem Hinweis auf die Erzeugung auch gelöst war. ;-)


ffgorcky - So 24.05.09 09:22

Könntest Du denn noch mal Deine Probleme, die immer noch aktuell sind, zusammengefasst aufschreiben?
So langsam blicke ich da leider nicht mehr durch, welche jetzt erledigt sind und welche noch offen...