![]() |
Speziellen Substring aus String kopieren
Hallo zusammen!
Ich (Delphi-Anfänger :P), versuche seit 3 Stunden aus einem (sehr langen) String einen speziellen Substring zu kopieren. Problem an der ganzen Sache: Der Substring ist nie gleich. Noch dazu komm ich mit Copy und Pos nicht so klar wie ich es gerne hätte :) Beispiel: In String "Haupt" befindet sich der gesuchte Substring "Unbekannt". Das einzige was über diesen Substring bekannt ist, ist folgendes: Er befindet sich 1 Stelle nach dem Substring "Edit1.text". Dies ändert sich nie, dennoch ist der gesuchte Substring bei meinem Projekt niemals der Gleiche. Wie zum Teufel schaffe ich es, diesen String herauszufinden? Die einzige Information ist, wie gesagt, der andere Substring vor dem gesuchten Substring, nichtmal die Position ist immer die Gleiche. So hab ich es probiert - erfolglos:
Delphi-Quellcode:
Selbst wenn der Code funktionieren würde, wäre ich noch unzufrieden damit, da auch er seine Funktion nicht wirklich erfüllen kann: Die Länge des gesuchten Substrings ist ebenfalls unbekannt, die 7 im Code ist blos, damit ich überhaupt ein Ergebnis bekomme.
SubStr1 := Pos (x,s); // x = bekannter Substring, s = "Haupt"
SubStr2 := Copy (s, Substr1+1,7); ShowMessage(SubStr2) Nochmal die Fakten über den unbekannten Substring: - Niemals der gleiche - Immer unterschiedlich lang - Position im String nie gleich - allerdings immer nach Substring "Edit1.text" - Gesuchter SubString endet bei nächstem Leerzeichen Ich hoffe das ganze war jetzt nicht zu verwirrend... Danke im Vorraus an alle, die sich die Mühe machen mir zu helfen! |
Re: Speziellen Substring aus String kopieren
Zitat:
|
Re: Speziellen Substring aus String kopieren
Dir als Anfänger würde ich noch die Prozedur Delete enpfehlen. Sie hat die gleichen Parameter wie Copy. Zwar kann man alles mit Copy machen, aber als Anfänger kann man sich das leichter machen.
Außerdem würde ich dir empfehlen mit einem Temporär-String zu arbeiten, also einer Kopie deines eigentlichen Strings. Dann kannst du dein Temporär-String auch zerlegen ohne dein eigentlichen String zu zerstören. Also
Delphi-Quellcode:
//
var
... sTemp: String; begin ... sTemp := s; Delete(sTemp, 1, Pos(x,sTemp) + 1); // entfernt alles bis zu der Such-Position und ein Zeichen mehr SubStr2 := Copy (sTemp, 1, Pos(' ', sTemp)); // kopiert alles bis zum nächsten Leerzeichen ShowMessage(SubStr2) EDIT: Ich hab bemerkt, daß ich den Beitrag missverstanden habe. Ich bearbeite meine Antwort noch mal. EDIT2: Ich glaube es war doch richtig. Wenn nicht, dann bessere ich es aus. Die ganzen bekannte und unbekannte Substrings bringen mich irgendwie durcheinander. Am besten ein Text als Beispiel, dann wäre das einfacher. |
Re: Speziellen Substring aus String kopieren
Oder man lagert die Funktionalität direkt in eine Funktion aus, weshalb man dank Call By Value ohnehin eine "eigene Kopie" hat die man lustig zerstückeln kann wie man will ;).
|
Re: Speziellen Substring aus String kopieren
Zitat:
Zu Popov: Der String kann ruhig zerstückelt werden, den brauch ich danach nicht mehr :) Grüße Edit1 für Popov: Also, gesucht ist SubString "Unbekannt" im String "Unwichtig". Einziges Indiz: "Unbekannt" steht immer direkt nach dem bekannten Substring "Bekannt", und endet mit einem Leerzeichen. Ziel des Ganzen: "Unbekannt" soll in eine Variable / einen String extrahiert werden. Reicht das, oder was genau hast du nicht verstanden? Grüße |
Re: Speziellen Substring aus String kopieren
Zitat:
Mach es doch einfacher: Gesucht wird SubString im String. Einziges Indiz: der unbekannte SubString steht immer direkt nach dem bekannten SubString und endet mit einem Leerzeichen. Ist es das was du willst? |
Re: Speziellen Substring aus String kopieren
Nunja, prinzipiell würde das ganze so aussehen:
Du suchst mit Pos den String "Edit1.text" in deinem String. Sobald Du die Position hast, löscht Du mit Delete vom Anfang des Strings bis zur gefundenen Position + 9 (Edit1.Text ist 10 Zeichen lang, aber das E ist von der gefundenen Position schon "inkludier") alle Zeichen im String. Jetzt beginnt der bearbeitete String mit dem gewünschten variablen String. Allerdings hängt da ja jetzt wie Du meintest noch jede Menge Gewusel hinten dran. Entsprechend ist der nächste Schritt jetzt, das abschließende Leerzeichen zu finden mit Pos und von dieser Position aus den Rest ebenfalls zu löschen. Dadurch hast Du den gesuchten String Quasi aus dem Original String "herausgeschnitten". Hier ist auch eine Demonstration wie das implementiert werden könnte. Ich würde Dir aber empfehlen es basierend auf der Anleitung auch mal selbst zu probieren:
Delphi-Quellcode:
Wenn Du Fragen zur Funktion hast, nur raus damit.
function ExtractSubStringFromString(StringToExtractFrom : string) : string;
var StringStart, StringEnd : Integer; begin StringStart := Pos('Edit1.text', StringToExtractFrom); if StringStart > 0 then begin Delete(StringToExtractFrom, 1, StringStart + 9); StringEnd := Pos(' ', StringToExtractFrom); if StringEnd > 0 then begin Delete(StringToExtractFrom, StringEnd, Length(StringToExtractFrom)); Result := StringToExtractFrom; end; end; end; |
Re: Speziellen Substring aus String kopieren
Zitat:
Sorry wollte es mit meinen Bezeichnungen blos einfacher machen, weils mich selbst langsam verwirrt... @ Fridolin Danke, das werd ich gleich mal ausprobieren. Das einzige was noch nicht stimmt: Mit Edit1.Text meinte ich eigentlich auch einen String, hab ich leider falsch formuliert. Der ergibt sich eben aus dem Inhalt vom Textfeld Edit1.Text. |
Re: Speziellen Substring aus String kopieren
Ist ungeprüft, sollte aber funktionieren:
Delphi-Quellcode:
Versuch das.
var
p: Integer; SubStr, Str, SubStr2: String; begin p := Pos(SubStr, Str); Delete(Str, 1, p + Length(SubStr) + 1); SubStr2 := Copy (Str, 1, Pos(' ', Str)); ShowMessage(SubStr2) |
Re: Speziellen Substring aus String kopieren
Hm, würde gerne beide Varianten ausprobieren, aber seit etwa 3 Minuten bekommt mein Delphi regelmäßig den fatalen Fehler "SY576"
Mal schauen ob ich das i-wie noch hinbekomme heute, auf jeden Fall vielen Dank euch beiden, ihr habt mir sehr geholfen! Kleine Auflösung, wie zur Hölle so ein String überhaupt entstehen kann, falls es jemanden interessiert: Entschlüsselter Md5 Hash. Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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