Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi strings um ein bestimmtes zeichen vermindern (https://www.delphipraxis.net/127219-strings-um-ein-bestimmtes-zeichen-vermindern.html)

Molzer 9. Jan 2009 10:30


strings um ein bestimmtes zeichen vermindern
 
wie kann man aus einem string s ein bestimmtes zeichen s[i] abziehen??

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
s:='abcdefghij' ;

s:=s-s[4];//diese zeile ergibt einen fehler
showmessage(s);

end;

fkerber 9. Jan 2009 10:32

Re: strings um ein bestimmtes zeichen vermindern
 
Hi!

Willst du quasi aus der Mitte ein Zeichen "ausschneiden"?
Ich denke, dann müsstest du quasi einen neuen String zusammenbauen aus den Zeichen, die du noch haben möchtest.
Dabei sollte dir Delphi-Referenz durchsuchencopy weiterhelfen.


Ciao, Frederic

Klaus01 9. Jan 2009 10:32

Re: strings um ein bestimmtes zeichen vermindern
 
Mit Kanonen auf Spatzen:

Delphi-Quellcode:
s:=stringReplace(s,s[4],'',[]);
Grüße
Klaus

Der.Kaktus 9. Jan 2009 10:32

Re: strings um ein bestimmtes zeichen vermindern
 
Delphi-Quellcode:
delete(s,4,1);

mkinzler 9. Jan 2009 10:33

Re: strings um ein bestimmtes zeichen vermindern
 
Meinst du das Zeiceh aus dem String entfernen?
Delete()

Molzer 9. Jan 2009 10:36

Re: strings um ein bestimmtes zeichen vermindern
 
mein problem:

jede folge von leerzeichen >1 is durch ein einzelnes leerzeichen und der anzahl der leerzeichen zu ersetzen.

das wetter ______ist...
das wetter 6ist...

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var f:textfile;
z,i,n,y:integer;
s:string;
begin
n:=0;
if opendialog1.execute then begin
assignfile(f, opendialog1.filename);
reset(f);
read(f, s);
z:=length(s);
 showmessage(inttostr(z));
for i := 1 to z do begin
//  while s[i] =char(32) do begin
  if s[i] =char(32) then
  n:=n+1;
  end;
  ;

  end;
  showmessage(s[i]);


    end;
      closefile(f);
  end;

alzaimar 9. Jan 2009 12:43

Re: strings um ein bestimmtes zeichen vermindern
 
Delphi-Quellcode:
Function ZapSpacesGeneric (Const aString : String) : String;
Var
  sPrevVersion : String;
Begin
  Result := aString;
  While Pos (' ', Result) > 0 Do // solange doppelte Leerzeichen vorhanden sind
    Result := StringReplace (Result, ' ',' ', [rfReplaceAll]) // ersetze sie durch ein Leerzeichen
End;
Eine knappe Implementierung mit Bordmitteln, die beinahe jeden Performancewettbewerb verliert, aber für den Hausgebrauch ausreichend ist. Im Prinzip werden solange alle doppelten Leerzeichen durch ein einziges Leerzeichen ersetzt, bis keine doppelten Leerzeichen mehr vorhanden sind.

Klaus01 9. Jan 2009 13:07

Re: strings um ein bestimmtes zeichen vermindern
 
Hallo,

@alzaimar
Dein Lösung zählt nicht die Anzahl der Leerzeichen wenn mehr als 1 Leerzeichen
hintereinander folgen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  j: Integer;
  s,s1: String;
begin
  s:='dies ist   ein      Test';
  s1:='';
  while pos(' ',s) > 0 do
    begin
      s1:=s1+copy(s,1,pos(' ',s));
      delete(s,1,pos(' ',s));
      if s[1] = ' ' then
        begin
          j:=2;
          while s[j] = ' ' do
            inc(j);
          delete(s,1,j-1);
          s1:=s1+IntToStr(j);
        end;
    end;
  s1:=s1+s;
  edit1.Text:=s1;
end;
Ausgabe:
dies ist 4ein 7Test

Grüße
Klaus

nahpets 9. Jan 2009 13:10

Re: strings um ein bestimmtes zeichen vermindern
 
Hallo,

Du möchtest für die Leerzeichen so 'ner Art Lauflängenkodierung.
Dashier ist mal eben so schnell dahingedaddelt und sicherlich nicht fehlerfrei, aber vielleicht hilfts ja schon mal:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
          i  : Integer;
          k  : Integer;
          s  : String;
          ch : Char;
          sIn : String;
begin
  sIn := 'Was  steht denn   hier jetzt  an   Leerzeichen?';
  i  := 0;
  k  := -1;
  s  := '';
  for i := 1 to Length(sIn) do begin
    ch := sIn[i];
    case ch of
      ' ' : case k Of
             -1 : begin
                    s := s + ch;
                    Inc(k);
                  end;
            else
              inc(k);
            end;
    else
      case k of
        -1 : k := 0;
         0 : k := 0;
         1 : Begin
               s := s + ' ';
               k := 0;
             end;
      else
        s := s + ' ' + IntToStr(k);
        k := -1;
      end;
      s := s + ch;
    end;
  end;
  ShowMessage(sIn + #13 + s);
end;
Wenn es sich bei Deiner Datei um eine Textdatei handelt, könntest Du sie in eine Stringliste lesen und anstelle von sIn das Text-Attribut der Stringliste benutzen oder die Stringliste zeilenweise durchgehen oder auch die Textdatei zeilenweise lesen.

Und Klaus war schneller :wink:

edit: Schreibfehler korrigiert

Molzer 9. Jan 2009 13:17

Re: strings um ein bestimmtes zeichen vermindern
 
Danke für Eure Hilfe!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.
Seite 1 von 2  1 2      

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