Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Leerzeichen in einem String zählen (https://www.delphipraxis.net/146046-leerzeichen-einem-string-zaehlen.html)

loki91 12. Jan 2010 20:27


Leerzeichen in einem String zählen
 
Hallo,

Ich hab ein Problem mit delphi 5 ... hab so gut wie keine Erfahrung, wir lernen delphi gerade in der schule :/

Ich soll in einem String, der z.B.: "Das ist ein Beispielsatz" heißt, die Leerzeichen zählen und in einem edit Feld wiedergeben, wenn auf einen Button gedrückt wird.
Nun ja ich hab nun unzählige Google-Suchen gestartet aber kein Thema traf auf meins zu.

Kann wer helfen?


loki

mkinzler 12. Jan 2010 20:36

Re: Leerzeichen in einem String zählen
 
Entweder
-mit Pos()/PosEx() Leerzeichen suchen oder
-Lange ermittlen; Leerzeichen durch Leerstrings ersetzen; neue länge ermittlen -> Unterschied

himitsu 12. Jan 2010 20:38

Re: Leerzeichen in einem String zählen
 
oder

in einer Schleife alle Zeichen durchgehn
und alle Leerzeichen zählen, welche vorbeikommen :roll:

Luckie 12. Jan 2010 20:38

Re: Leerzeichen in einem String zählen
 
Erstmal falsche Forum. Das hat nichts mit der IDE zu tun.

Zweitens kann man über den Index auf ein Zeichen in einem String zu greifen. Mit einer for-schleife so nacheinander auf jedes einzelne Zeichen. Jetzt überlege mal weiter.

@mkinzler: Ist das nicht etwas umständlich?

mkinzler 12. Jan 2010 20:40

Re: Leerzeichen in einem String zählen
 
Nein warum? Sind 3 Befehle

Luckie 12. Jan 2010 20:43

Re: Leerzeichen in einem String zählen
 
Er braucht doch die Anzahl. Wie bekommt er bei deiner Vorgehensweise die Anzahl?

loki91 12. Jan 2010 20:45

Re: Leerzeichen in einem String zählen
 
oh man peinlich xD :oops: ich hab ja so keine ahnung...

Wenn mir jemand sagt:
Zitat:

oder

in einer Schleife alle Zeichen durchgehn
und alle Leerzeichen zählen, welche vorbeikommen
dann mag das zwar selbstverständlich klingen, ich kann damit aber null anfangen >.<

Habs nun so:
Delphi-Quellcode:
var
s:string;
begin
Edit1.Text := s;
Pos(' ',s);
end;

end.
Nun wird, wenn ich den Button drücke, das Edit1 Feld, in dem der Satz stand, einfach gelöscht...was mach ich falsch? (ich weiß ist einiges...:P)

loki

Matze 12. Jan 2010 20:46

Re: Leerzeichen in einem String zählen
 
Zitat:

Zitat von Luckie
Er braucht doch die Anzahl. Wie bekommt er bei deiner Vorgehensweise die Anzahl?

Das hat Markus doch geschrieben:

- alte Länge mit Length() ermitteln und in Variable speichern
- Leerzeichen im String durch einen Leerstring ersetzen mit StringReplace()
- neue Länge ermitteln
- AlteLänge - NeueLänge = Anzahl der Leerzeichen

Hm, das wären aber 4 Schritte.

Edit: Einen String kannst du so durchgehen:

Delphi-Quellcode:
for i := 1 to Length(DeinString) do
Auf ein einzelnes Zeichen kannst du so zugreifen bzw. es mit einem Char, hier ' ', vergleichen:

Delphi-Quellcode:
DeinString[i]
Den rest kriegst du hin. ;)

mkinzler 12. Jan 2010 20:48

Re: Leerzeichen in einem String zählen
 
Geht aber auch in einer Zeile :zwinker:

Luckie 12. Jan 2010 20:49

Re: Leerzeichen in einem String zählen
 
Delphi-Quellcode:
for i := 1 to length(s) do
begin
  if s[i] = ??? then
    Zaehler := Zaehler + 1
end;
Den Rest überleg dir mal selber.

@Matze: Jetzt hab eich es auch verstanden. Gar nicht mal so dumm. ;) Aber ich glaube, der Lehrer dachte eher an eine Schleife.

himitsu 12. Jan 2010 20:53

Re: Leerzeichen in einem String zählen
 
Zitat:

Zitat von Luckie
Gar nicht mal so dumm. ;)

Wobei 'ne Schleife aber schneller sein sollte, als soeine Stringoperation.

PS: die Schleife macht genau das, was der Mensch auch machen würde ... sich alle Zeichen der Reihe nach ansehn und dabei die gewünschten Zeichen zählen ;)

loki91 12. Jan 2010 21:00

Re: Leerzeichen in einem String zählen
 
So nun kann der Code nicht compiled werden, liegts daran, dass der Zaehler noch nicht wiedergegeben wurde, oder an was anderem?
Delphi-Quellcode:
var
i,zaehler:integer;
s:string;
begin
s := Edit1.Text;

for i := 1 to length(s) do
begin
  if s[i] = ' ' then     //Falls im string Leerzeichen gefunden werden (' ') dann
    zaehler := zaehler + 1//erhoehe den Zaehler um 1, oder?


end;

end.
loki

Luckie 12. Jan 2010 21:03

Re: Leerzeichen in einem String zählen
 
Geschickt wäre es wohl, wenn du uns die Fehlermeldung sagen würdest.

Matze 12. Jan 2010 21:03

Re: Leerzeichen in einem String zählen
 
Der Wert von "zaehler" ist zu Beginn undefiniert. Wenn du "zaehler" vor der Schleife den Wert 0 zuweist, sollte es gehen.

loki91 12. Jan 2010 21:08

Re: Leerzeichen in einem String zählen
 
Fehlermeldung:

Auf 'zaehler' zugewiesener Wert wird niemals benutzt.
" selbe nochmal "
';' erwartet aber '.' gefunden


hab zaehler 0 zugewiesen, denk ich jetzt, also hab zaehler := 0 geschrieben, hat dennoch nicht geklappt.

Luckie 12. Jan 2010 21:11

Re: Leerzeichen in einem String zählen
 
OK, am Ende der Schleife steht in der Variablen zaehler jetzt was drin. Und nu?

Zitat:

';' erwartet aber '.' gefunden
Auf was könnte der Hinweis wohl hindeuten? Und dann guck dir deinen Quelltext noch mal an.

himitsu 12. Jan 2010 21:11

Re: Leerzeichen in einem String zählen
 
zähle mal die END; am Ende deiner Prozedur.

PS: sowas läßt sich übrigens mit einer "ordentlichen" Codefarmatierung "recht" leicht entdecken.

Matze 12. Jan 2010 21:12

Re: Leerzeichen in einem String zählen
 
Das erste sagt aus, dass du den Wert nicht nutzt, also nirgendwo weiterverarbeitest, ausgibst o.ä. Das ist auch nur ein Hinweis und kein Fehler. Nach

Delphi-Quellcode:
zaehler := zaehler + 1
solltest du ein ";" einfügen (sagt die Fehlermeldung deutlich).

Luckie hat es bereits geschrieben: Sagte uns, was nicht geht, welche Meldungen kommen etc. "hat dennoch nicht geklappt" hilft keinem.

Achja, ganz wichtig: Delphi-Grundlagentutorials.

Luckie 12. Jan 2010 21:13

Re: Leerzeichen in einem String zählen
 
Irgendwie habe ich das Gefühl dass meine pädagogischen Antworten torpediert werden. ;)

loki91 12. Jan 2010 21:20

Re: Leerzeichen in einem String zählen
 
Wenn Fehler auftauchen überprüfe ich als erstes ob ein Semikolon fehlt, soweit bin ich.
Ehm... END's hab ich 2, eine zum beenden der Schleife und die andere um die Button-aktion zu beenden.

Ich denke das Problem ist, dass der Wert vom zaehler nicht ausgegeben wird, aber wie gebe ich den Wert nun in einem Edit-Feld aus?

Normalerweise sieht es ja dann so aus
label1.caption := IntToStr(zaehler);

wieso geht das hier nicht:

Edit1.Caption := IntToStr(zaehler); ?

mkinzler 12. Jan 2010 21:20

Re: Leerzeichen in einem String zählen
 
Es fehlt auch das Prozedurende

Luckie 12. Jan 2010 21:22

Re: Leerzeichen in einem String zählen
 
Zitat:

Zitat von loki91
Edit1.Caption := IntToStr(zaehler);

Weil ein Edit die Eigenschaft Caption nicht hat. Ein lesen der Fehlermeldung wäre auch hilfreich. Aber guck mal wo du die Zeichenkette her hast.

loki91 12. Jan 2010 21:28

Re: Leerzeichen in einem String zählen
 
ich brauch insgesamt 3 end's ?

Hab mir gedacht, wenn ich 2 begin drin habe, reichen 2 end's aus. hm.

Ich habs nun einfach mit Label1.Caption := IntToStr(zaehler); gemacht um irgend ein Ergebnis zu sehen um nicht ganz zu verzweifeln :X.

Jetzt hab ich noch eine Fehlermeldung zu beseitigen.

"Auf 'i' zugewiesener Wert wird niemals genutzt"
"Deklaration erwartet, aber Dateiende gefunden"


Muss ich 'i' nochmal irgendwie einen Wert zuweisen oder sowas? Wie beim zaehler := 0 ?

Luckie 12. Jan 2010 21:30

Re: Leerzeichen in einem String zählen
 
Wie sieht denn dein Quellcode jetzt aus?

loki91 12. Jan 2010 21:32

Re: Leerzeichen in einem String zählen
 
Delphi-Quellcode:
var
i,zaehler:integer;
s:string;
begin
s := Edit1.Text;
 i := 0;  // war nur ein versuch..
 zaehler := 0;
for i := 1 to length(s) do
     begin
  if s[i] = ' ' then
    zaehler := zaehler + 1;
    Label1.Caption := IntToStr(zaehler);

     end;

end;

mkinzler 12. Jan 2010 21:32

Re: Leerzeichen in einem String zählen
 
Zitat:

ich brauch insgesamt 3 end's ?
Ja da es ja auch 3 begins sind ( das letzte end. gehört zum Begin der Unit)

loki91 12. Jan 2010 21:40

Re: Leerzeichen in einem String zählen
 
das dritte end wird mir unterstrichen /:

Kann es sein dass die verschiedenen Aktionen sich gegenseitig behindern können?
Das Formular sieht so aus um mal eine kleine Vorstellung zu bekommen:
http://www.abload.de/img/formular6rex.jpg

Luckie 12. Jan 2010 21:46

Re: Leerzeichen in einem String zählen
 
Formatiere doch mal deinen Quellcode ordentlich mit Einrückungen, dann siehst du auch deine Fehler.

loki91 12. Jan 2010 21:56

Re: Leerzeichen in einem String zählen
 
:? das wird hier zum ratespiel ^^

Hab mal alles ein bisschen übersichtlicher gemacht und bin der Meinung der Fehler liegt irgendwo hier:

Delphi-Quellcode:
for i := 1 to length(s) do
     begin
  if s[i] = ' ' then
Fehlermeldung ist ja, "erwartet Deklaration, aber Dateiende gefunden" und alles was nicht deklariert worden ist bzw. nichts zugewiesen worden ist, ist das 'i' :/

mkinzler 12. Jan 2010 21:59

Re: Leerzeichen in einem String zählen
 
Rücke mal die ganze Unit so ein, dass die begin/end Paare auf gleicher Position liegen

loki91 12. Jan 2010 22:08

Re: Leerzeichen in einem String zählen
 
aha ich hatte nicht ein end zuviel sondern ein begin zuviel!

habs nun so;
Delphi-Quellcode:
var

  i, zaehler  : integer;
 s            : string;
    begin
           s    := Edit1.Text;
           zaehler   := 0;

           for i := 1 to length(s) do

           if s[i] = ' ' then
           zaehler := zaehler + 1;
           showmessage( IntToStr(zaehler));

     end;

end.
Nun klappts auch...puhh, war dass eine schwere Geburt xD, danke an alle für die ganzen Hinweise. Morgen geht der Spaß denke ich weiter^^


loki

PS: Gute Nacht

mkinzler 12. Jan 2010 22:12

Re: Leerzeichen in einem String zählen
 
Ich hatte eher so
Delphi-Quellcode:
var
  i, zaehler: integer;
  s: string;
begin
    s := Edit1.Text;
    zaehler := 0;

     for i := 1 to length(s) do
           if s[i] = ' ' then
               zaehler := zaehler + 1;
     showmessage( IntToStr(zaehler));
end;
gedacht

hoika 14. Jan 2010 13:52

Re: Leerzeichen in einem String zählen
 
Hallo,

oder um bei den begin/end zu bleiben

Delphi-Quellcode:
var
  i, zaehler: integer;
  s: string;
begin
  s := Edit1.Text;
  zaehler := 0;

  for i := 1 to length(s) do
  begin
    if s[i] = ' ' then
    begin
      zaehler := zaehler + 1;
    end; // if s[i] = ' ' then
  end; // for i := 1 to length(s) do

  showmessage( IntToStr(zaehler));
end; { procedure ... }
Klar ist hier begin/end nicht notwendig,
macht es aber leichter erweiterbar,
falls nach dem then noch mehr Zeilen kommen sollen.


Heiko

p80286 14. Jan 2010 14:39

Re: Leerzeichen in einem String zählen
 
Endlich mal jemand der sich bemüßigt fühlt zu schreiben wozu ein end gehört.

Gruß
k-H

Luckie 14. Jan 2010 14:42

Re: Leerzeichen in einem String zählen
 
Zitat:

Zitat von p80286
Endlich mal jemand der sich bemüßigt fühlt zu schreiben wozu ein end gehört.

Jemand, der sich bemüßigt fühlt dies zu tun macht was falsch. ;)

hoika 14. Jan 2010 14:53

Re: Leerzeichen in einem String zählen
 
Hallo,

1. ich bin ein #-Sammler (haben wollen)
2. war das nur für den Thread-Ersteller

;)


Heiko

xZise 16. Jan 2010 19:03

Re: Leerzeichen in einem String zählen
 
Es war eigentlich kein begin zu viel, sondern genau richtig. Allerdings gibt es ein end was kein begin hat. Und zwar ist es das letzte Wort in der Datei:
Delphi-Quellcode:
[...]
end.
Und das hast du anscheinend nie gezeigt.
Um das mal so zu sagen:*zu jedem begin gehört ein end;.

MfG
Fabian

Micha88 16. Jan 2010 21:15

Re: Leerzeichen in einem String zählen
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
for i := 1 to length(s) do
begin
  if s[i] = ??? then
    Zaehler := Zaehler + 1
end;
[...]

Vorher muss man aber Zaehler mit X initialisieren, sonst gibts ein böses Erwachen.

Luckie 16. Jan 2010 22:00

Re: Leerzeichen in einem String zählen
 
Das war ja nur eine Anregung. Etwas sollte der Fragesteller schon noch selber machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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