Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inkompatible Typen: Char und 'String' (https://www.delphipraxis.net/128896-inkompatible-typen-char-und-string.html)

rwachtel 9. Jun 2009 19:56

Re: Inkompatible Typen: Char und 'String'
 
Ein Char kann nicht leer sein - es enthält immer exakt ein Zeichen.

Melli012345 9. Jun 2009 20:02

Re: Inkompatible Typen: Char und 'String'
 
okay, danke! Und wie kann ich dann auf einem anderen Weg erreichen, dass ein Zeichen gelöscht wird?
Ziel ist ja, dass ich ein Wort (z.B. Stuttgart) eingebe, und ein Zeichen (z.B. t) eingebe, und dann in dem Beispiel alle 't' aus dem Wort 'Stuttgart' gelöscht werden, so dass nur noch "Sugar" ausgegeben wird.

mkinzler 9. Jun 2009 20:06

Re: Inkompatible Typen: Char und 'String'
 
Schau dir mal StringReplace() an

Satty67 9. Jun 2009 20:09

Re: Inkompatible Typen: Char und 'String'
 
Wenn Du ein Zeichen im String "z" löschen willst, dann
Delphi-Quellcode:
if a[i] = z then Delete(z,i,1)
aber Du müsstest dann rückwärts durch den String gehen, da z ja u.U. immer kürzer wird und "ende" dann über den String hinaus zeigt.

Dann hast Du (soweit ich das sehe) eine Enlosschleife mit while, weil Du "i" nicht veränderst (immer i = ende = 0)

Dann innerhalb der Schleife Zuweisung an "a" und "z", was irgenwie alles nutzlos macht ;)

Melli012345 9. Jun 2009 20:53

Re: Inkompatible Typen: Char und 'String'
 
dankeschön für eure Tipps :)
hat mir echt geholfen
habs nun auch - fast!
einziges Problem: das Wort "Stuttgart" liefert bei der Aufforderung, alle t zu löschen, "Sutgar"
kann ich da noch was dementsprechend ändern? Oder müsste ich dann nochmal alles umschmeißen?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
var a, z: string;

 begin
a := edit1.text;

for i := 1 to length(a) do

 begin
    z := edit2.text ;
    if a[i] = z then delete(a,i,1);

  end;
label1.caption := a;
    end;
end.
end.

Satty67 9. Jun 2009 21:06

Re: Inkompatible Typen: Char und 'String'
 
Delphi-Quellcode:
for i := length(a) downto 1 do
Von hinten durch den String, sehe ich jetzt so auf den ersten Blick.

Du musst ja bedenken, das der String immer kürzer wird und am Ende nicht mehr Length(a) hat. Dazu musst Du auch wissen, das die for-Schleife sich beim ersten Durchlauf Length(a) merkt und den wert nicht an die neue Länge anpasst.

€: Das doppelte end. kann auch weg, müsste Delphi sogar darauf hinweisen. Zuweisung an z aus der Schleife raus, das ändert sich ja nicht ständig:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  a, z: string;
begin
  a := edit1.text;
  z := edit2.text;
  for i := length(a) downto 1 do
  begin
    if a[i] = z then delete(a,i,1);
  end;
  label1.caption := a;
end;

end.
PS: bei Deinem letzten Code-Beispiel hat man schon gesehen, das Du die Vorschläge umgesetzt hast, auch wenn nicht alles war wohl zu viel. Achte ein bischen auf die Formatierung (also Einrückung), dann siehst Du besser wenn sich mal ein doppeltes End oder Begin eingeschlichen hat.

PPS: Der Vorschlag von mkinzler darfst Du Dir jetzt auch anschauen. Da hättest Du nicht sooo viel gelernt, aber wärst vor einer Stunde mit der Aufgabe fertig gewesen ;)

markus5766h 9. Jun 2009 21:22

Re: Inkompatible Typen: Char und 'String'
 
Hallo,
@Melli012345

hab' hier 'ne Funktion zum Löschen von Zeichen in Verzeichnissen/Pfaden,
lässt sich mit wenig AUfwand für deine Zwecke "umbauen"

Delphi-Quellcode:
function CheckInvalidChars(const FilePath: String): String;                    // replace invalid Path-File-Chars
var
 sFilePath, sFileName: String;
 l, i : Integer;
Const
 RePath : array[1..13] of String =
  ('/', '*', '?', '"', '<', '>', '|', '!', '§', '$', '%', '&', '#');           // Chars to replace in Path
 ReFile : array[1..15] of String =
  ('/', '\', ':', '*', '<', '>', '?', '"', '|', '!', '§', '$', '%', '&', '#'); // Chars to replace in File
 ReP : String = '_';  // replace invalid chars in Path with '_'
 ReF : String = '_';  // replace invalid chars in File with '_'
begin
 l := 0;
  for i := 1 to Length(FilePath) do
   begin
    if FilePath[i] = '\' then l := i;
   end;

 sFileName := copy(FilePath, l+1, length(FilePath)-l+1);
 sFilePath := copy(FilePath, 0, l);

 // File - Path, check and replace
 for i := 1 to 13 do
  sFilePath := StringReplace(sFilePath, RePath[i], ReP, [rfReplaceAll, rfIgnoreCase]);

 // File - Name, check and replace
 for i := 1 to 15 do
  sFileName := StringReplace(sFileName, ReFile[i], ReF, [rfReplaceAll, rfIgnoreCase]);

 Result := sFilePath + sFileName;
end;

Satty67 10. Jun 2009 06:49

Re: Inkompatible Typen: Char und 'String'
 
Wobei natürlich jede Lösung mit StringReplace den Haken hat, das Zeichen getauscht und nicht gelöscht werden können.

mkinzler 10. Jun 2009 10:07

Re: Inkompatible Typen: Char und 'String'
 
Zitat:

Wobei natürlich jede Lösung mit StringReplace den Haken hat, das Zeichen getauscht und nicht gelöscht werden können.
Doch man kann doch durch '' ersetzen, dann wird das Zeichen gelöscht.
Zitat:

sZucker := StringReplace('Stuttgart', 't', '', [rfReplaceAll]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 2 von 2     12   

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