![]() |
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; |
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 ![]() Ciao, Frederic |
Re: strings um ein bestimmtes zeichen vermindern
Mit Kanonen auf Spatzen:
Delphi-Quellcode:
Grüße
s:=stringReplace(s,s[4],'',[]);
Klaus |
Re: strings um ein bestimmtes zeichen vermindern
Delphi-Quellcode:
delete(s,4,1);
|
Re: strings um ein bestimmtes zeichen vermindern
Meinst du das Zeiceh aus dem String entfernen?
Delete() |
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; |
Re: strings um ein bestimmtes zeichen vermindern
Delphi-Quellcode:
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.
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; |
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:
Ausgabe:
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; dies ist 4ein 7Test Grüße Klaus |
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:
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.
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; Und Klaus war schneller :wink: edit: Schreibfehler korrigiert |
Re: strings um ein bestimmtes zeichen vermindern
Danke für Eure Hilfe!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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