Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem bei Löschen aus String (https://www.delphipraxis.net/27914-problem-bei-loeschen-aus-string.html)

DF.A 17. Aug 2004 12:34


Problem bei Löschen aus String
 
Hallo, ich habe einen String bei dem ich alle Leerstellen in Semikolons umwandel, da ich leerstellen als Semikolon angezeigt bekommen möchte. Bei mehreren Leerzeichen soll allerdings auch nur ein Semikolon zwischen den Buchstaben stehen. Deshalb probiere ich mit einer Schleife die überflüssigen Semikolons zu löschen. Das ist allerdings der Moment wo die Sache nicht mehr so ganz funktioniert. Ich muss da irgendwo einen logischen Fehler drin haben komme aber überhaupt nicht drauf.
Also der String der in die Schleife übergeben sieht ungefähr flogendermaßen aus: sfslfj;;;;;safkjfsh;;;;sjf;jsf, soll nach der Schleife aber so aussehen: sfslfj;safkjfsh;sjf;jsf siehr aber so aus sfslfj;;safkjfsh;;sjf;jsf. Es werden nicht alle Semikolons gelöscht. Hier ist meine Source.
Delphi-Quellcode:
 TrimString := Trim(OriginalString);  
 SemikolonString := StringReplace(TrimString, ' ', ';', [rfReplaceAll]);
 iLaenge := Length(OriginalString);
   for i := 0 to (iLaenge - 1) do begin
   if (SemikolonString[i] = ';') and (SemikolonString[i + 1] = ';') then begin
     Delete(SemikolonString,i,1);
   end;
 end;
 result := SemikolonString;
könnt ihr euch ja vielleicht mal angucken
mfg
DF.A

Stevie 17. Aug 2004 12:42

Re: Problem bei Löschen aus String
 
Delphi-Quellcode:
repeat
  temp := SemikolonString;
  SemikolonString := StringReplace(temp, ';;', ';', [rfReplaceAll]);
until SemikolonString = temp;

xineohp 17. Aug 2004 12:44

Re: Problem bei Löschen aus String
 
moin,

du darfst keine For-Schleife verwenden. Bei For-Schleifen darf die Indexvariable inerhalb der Schleife nicht geändert werden und auch der Indexbereich (soll heißen: Ausgangs und Zielwert der Indexvariablen) muss unverändert bleiben.
Nimm stattdessen eine while-Schleife, deren Index du selber steuerst: immer wenn etwas gelöscht wurde bleibt der Index unverändert, da ja jetzt ein anderes Zeichen an dieser Position sitzt. Andernfalls wird solange um eins erhöht bis wir am Énde des Strings angekommen sind.

Delphi-Quellcode:
TrimString := Trim(OriginalString);  
SemikolonString := StringReplace(TrimString, ' ', ';', [rfReplaceAll]);

   i := 1;
   while i < length(Semikolonstring)-1 do
     if (SemikolonString[i] = ';') and (SemikolonString[i + 1] = ';')
       then Delete(SemikolonString,i,1);
       else inc(i);
 
result := SemikolonString;

DF.A 17. Aug 2004 12:46

Re: Problem bei Löschen aus String
 
Hi
danke das funktioniert wie geschmiert :spin2: .
Ist auch irgendwie viel einfacher. Bin noch Anfänger deshalb muss ich bei sowas noch nen bisschen was lernen.
Vielen Dank jedenfalls.

chris 17. Aug 2004 12:48

Re: Problem bei Löschen aus String
 
hi,

vielleicht so (nicht getestet):

Delphi-Quellcode:
  TrimString := Trim(OriginalString);
  SemikolonString := StringReplace(TrimString, ' ', ';', [rfReplaceAll]);
  iLaenge := Length(OriginalString);
  repeat
    ok := true;
    for i := 0 to (iLaenge - 1) do
      if (SemikolonString[i] = ';') and (SemikolonString[i + 1] = ';') then begin
        Delete(SemikolonString, i, 1);
        ok := false
      end;
  until ok;
  result := SemikolonString


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