![]() |
String-Bearbeiten (Filtern, Löschen, etc.)
Moin,
ich steh grad total auf dem Schlauch, vielleicht könnt ihr mir helfen. Ich habe einen String, der so aufgebaut ist: meintest { test tets; }. Jetzt möchte ich nur an den Wert vor der {-Klammer kommen, alles was hinter dem ersten Wort ist soll gelöscht werden. Soweit kein Problem, hab ich gut hinbekommen. Wenn jetzt aber zwei {-Klammern nach dem ersten Wort stehen wird eine Klammer nicht gelöscht. Hat jemand ne Idee wieso ? Hier mal mein Code:
Delphi-Quellcode:
Als Ergebnis wird mir "meintest {" angezeigt. Wie kann ich das ausbessern ?
var
test : String = 'meintest {{ test tets; }'; procedure TForm2.Button1Click(Sender: TObject); var i, x : Integer; begin for i := 0 to Length(test) do if test[i] = '{' then x := i; Delete(test, x, Length(test)); ShowMessage(test); end; Desweiteren würde ich gerne alle Leerzeichen in diesem String löschen, da meine Delphi-Hilfe nicht mehr geht durchforste ich grade das Internet. Danke schonmal, |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Schon mal die folgenden Proceduren probiert:
Delphi-Quellcode:
Pos Routine
Returns the index value of the first character in a specified substring that occurs in a given string. Unit: System function Pos(const substr: string, const str: string): Integer; function Pos(const substr: WideString, const str: WideString): Integer; Description In Delphi, Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions. Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero. The PosEx function is similar to Pos, but provides additional features and can be used in C++ code.
Delphi-Quellcode:
Copy(...)
Returns a substring of a string or a segment of a dynamic array. |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Moin Pierre.
X ist nicht initialisiert, der Index i muss bei 0 beginnen und x liefert immer das letzte Vorkommen, weil du die Schleife nicht abbrichst. Einfacher wäre das:
Delphi-Quellcode:
Grüße vom marabu
function Before(s, pattern: String): String;
var i: Integer; begin i := Pos(pattern, s); Delete(s, i, Length(s)); Result := s; end; Edit: nur Kosmetik |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
@marabu: Danke genau das hab ich gewollt, vielen Dank.
Das Leerzeichen-Problem hab ich einfach mit
Delphi-Quellcode:
gelöst, falls es jemanden interessiert. ;)
s := StringReplace(s, ' ', '', [rfReplaceAll]);
|
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Trim() ist auch ganz nett - und entfernt keine inneren Blanks ...
marabu |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Hallo, ich hoffe ihr könnt mir nochmal helfen.
Ich probier mich grad an ner Routine, die alle Wörter die nicht zwischen zwei { } - Klammern stehen in Listbox geladen werden sollen. Leider hab ich gar keinen richtigen Ansatzpunkt oder ne Idee. Bis jetzt hab ich das so gemacht, ich prüfe ob eine { vorhanden ist, wenn ja dann merke ich mir dessen "Koordinaten". Dann suche ich nach dem } und lösche dann mittels Delete den Zwischenraum zwischen diesen Klammern. Leider geht das nicht, bei sowas: test {{ test } foo { foo }} geht nichts mehr. Es müssen keine Zusammenhänge bestehen, ich möchte einfach nur an die Worte kommen die außerhalb von {}-Klammern stehen. Thx. |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Wenn du es selbst schreiben willst, dann gehe durch den Text und erhöhe die Schachtelungsebene um eins, wenn du eine öffnende Klammer findest und verringere um eins für jede schließende Klammer. Den Text auf Ebene 0 zerlegst du dann geeignet in Wörter. Regular Expressions machen das ähnlich.
marabu |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Zitat:
|
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du stecken bleiben solltest oder einfach mal vergleichen möchtest ...
marabu |
Re: String-Bearbeiten (Filtern, Löschen, etc.)
Ich danke dir, du hast meinen Abend gerettet. :-)
(Ich hatte übrigens auch selbst ne Lösung, diese hatte auch nur noch 2 kleine Schönheitsfehler). :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 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