Delphi einfache String Verarbeitung - unerklärlicher Fehler oO

koffi

Lt. Junior Grade
Dabei seit
Jan. 2007
Beiträge
490
heyhey!

hab grad ein (für meine verhältnisse) echt kompliziertes Programm geschrieben.
bis jetzt hab ich alles sehr gut hinbekommen aber zum krönenden abschluss will ich einen string (variable a) so verarbeiten dass alle Nullen die in dem Sting vorkommen einfach wegfallen.
das sieht so aus:

procedure TForm1.Button2Click(Sender: TObject);
begin
a := edit1.Text;
j := Length(a);

for i := 1 to j do
begin
if a = '0'
then a := ''
end;

end;


doch es erscheint jedes mal diese fehlermeldung

[Fehler] Unit1.pas(69): E2010 Inkompatible Typen: 'Char' und 'string'

ich versteh das nicht, weis jemand rat?
vielen dank im vorraus
 
also ich habe folgendes verändert

procedure TForm1.Button2Click(Sender: TObject);
begin
a := edit1.Text;
j := Length(a);

for i := 1 to j do
begin
if a = '0'
then a := ' ' //<===
end;

end;


ich habe ein leerzeichen zwischen die '' gemacht, und die fehlermeldung ist weg.
allerdings verstehe ich nicht warum ich nicht einfach KEIN zeichen machen kann, sondern ein leerzeichen da rein muss....
 
Naja, weil exakt ein Zeichen erwartet wird. Nicht keins, nicht mehrere, sondern eins. Kein Zeichen ist nunmal etwas anderes als ein Zeichen. :) Ersteres wäre übrigens ein Leerstring.
Delphi (und Pascal) unterscheidet da sehr strikt zwischen einzelnen Zeichen und Zeichenketten.

Hope this helps.
 
Naja im Grunde unterscheidet jede höhere Programmiersprache strikt zwischen Zeichen und Strings, weil ein String nichts anderes als ein Array of Char ist (gut, in Pascal noch etwas besonderer).

Ich versteh auch nicht ganz, was der Code machen soll...
Willst du nur führende Nullen entfernen oder alle Nullen entfernen?
Für letzteres würde sich ja ein String-Replace anbieten...
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  a := StringReplace (edit1.Text, '0', '', [rfReplaceAll]);
end;
(Quelle: http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace )

Wenn du nur führende Nullen entfernen willst wäre das hier besser:
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  a := edit1.Text;
  j := Length(a);
  i := 1;
  while ((i <= j) AND (a[i] = '0'))
    i := i + 1;
  wend;
  
  if (i > j) then begin
    a := '';   // String is nur aus Nullen
  end else begin
    a := Copy(a, i, j - i + 1);  // von i bis zum Ende alles kopieren, 
                      // der String hat j Zeichen, aber die ersten i-1
                      // Zeichen werden übersprungen, also müssen
                      // j - (i-1) Zeichen = j - i + 1 Zeichen kopiert werden
  end;

end;

(Quelle: http://www.delphibasics.co.uk/RTL.asp?Name=Copy )

Ach ja hab die Codes nicht getestet, meine Pascal/Delphi-Zeit is lange her...


Edit:
Wenn du nur die Nullen entfernen willst ginge vielleicht auch das hier...
is aber unbequemer als StringReplace...
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  a := edit1.Text;
  j := Length(a);
  z := 0;
  for i := 1 to j do begin
    if (a[i] <> '0') then begin
      z = z + 1;
      a[z] = a[i];
    end if
  end;
  SetLength(a, z);
end;


Edit:
Und nochmal zu der Zeichen/Zeichenfolge-Problematik...
Ein Zeichen kannst du wie einen Buchstaben sehen... ein Buchstabe ist a,b,c,...,x,y,z ... ein Wort besteht aus Buchstaben (=Zeichenfolge), ein Wort enthält aber niemals "keinen" Buchstaben... du kannst nicht sagen im Wort "hallo" kommt nach dem "a" der Buchstabe "kein Buchstabe" und dann das "l".
 
Zuletzt bearbeitet:
alles klar, jetzt ist es mir eingeleuchtet :freaky:
die stringreplace funktion kannte ich noch nicht, ich wollte es eben mal mit meinen kenntnissen probieren.. aber danke für die info!
vielen dank für eure hilfe!
 
Zurück
Top