![]() |
Platzhalter in einem String übertragen
Hallo zusammen
Ich steh gerade vor einem (zumindest für mich) kniffligen problem. Und zwar habe ich eine Log-Datei die ich durchforsten möchte diese hat ganz verschiedene einträge. Jedoch will ich überprüffen ob dieser eintrag gültig ist oder nicht. Resp, ob er erwartet ist oder nicht. Der string enthält in der regel 2 informationen die wichtig sind. Der ganze string wird konfiguriert und mit Platzhalter versehen welche die 2 informationen darstellen. (kann da ganz verschiedenes stehen) ich will anschliessend anhand von Platzhalter 1 und der Konfiguration überprüffen ob Platzhalter 2 gültig ist... also der string könnte so aussehen: |platzhalter1| text text text text|Platzhalter2| text text wo sich jedoch die Platzhalter befinden ist offen. mein ziel ist es nun wie mit einer Maske über die Log-Datei zu fahren und immer die Platzhalter aufzufüllen und zu überprüffen. Jedoch wie mache ich das möglichst performant. Den String auseinanderschneiden und mit Pos zu prüffen ob er vorkommt kann ich selber... aber ich möchte dies halt möglichst performant lösen. So etwas wie ein Stringreplace halt einfach umgekehrt. Ich will die Strings die an dieser Position stehen wenn der rest des Textes übereinstimmt. gibt es hierfür eine gescheite und möglichst performante lösung ? Freundliche grüsse Gibb |
Re: Platzhalter in einem String übertragen
Sollte über reguläre ausrücke lösbar sein.
|
Re: Platzhalter in einem String übertragen
joa hab ich auch schon gehört das wollte ich sowieso noch googeln konnte mich aber nicht mehr an den Namen errinern. Soweit einmal danke.. :-D
wer ein gutes tutorial oder ne unit für delphi kennt darf mir gerne nen link servieren. |
Re: Platzhalter in einem String übertragen
Daniel hat am letzten Delp-Stammtisch einen Votreag über dieses thema gehalten:
![]() |
Re: Platzhalter in einem String übertragen
Joa das wäre sicherlich gut gewesen... leider finde ich auf dieser seite nirgends ein summary oder eine zusammenfassung. Entweder ich bin blind oder blöd oder es ist nicht da. ^^'
Wenns wirklich net da ist hilft mir der Link leider nicht weiter... |
Re: Platzhalter in einem String übertragen
|
Re: Platzhalter in einem String übertragen
das ist wirklich toll muss sagen find ich super diese videos... das hat mir echt geholfen... ich versuch mich jetzt hier einmal an meinem regulären ausdruck und ich hoff ich bekomm rückmeldung ob das möglich ist oder nicht... ^^'
der string den ich durchsuchen muss istdieserhier. der string den ich |Platzhalter1| muss ist|Platzhalter2|hier. <- so erhalt ich den string. der string den ich (.+) muss ist(.+)hier. <- wäre mein regulärer ausdruck den ich daraus machen muss umd die wörter durchsucehn und dieser zu erhalten richtig ? oder isses nun so das das + einfach wirklich ALLES nimmt was später kommt ? wenn ja wie unterbinde ich das ? |
Re: Platzhalter in einem String übertragen
Delphi-Quellcode:
Ich hab jetzt das mit dem Oben genannten String... leider scheint das nie zu matchen... könnte es daran liegen zum beispiel der Anfang des Strings nicht in der Expression vorkommt ?
if RE_NewState.Exec(LogToAnalyzeList[i]) then
begin NewState := RE_NewState.Match[0]; end; Also unbekannt unbekannt der string den ich durchsuchen muss istdieserhier. und ich nur diesen teil erhalte: der string den ich |Platzhalter1| muss ist|Platzhalter2|hier. <- so erhalt ich den string. und ich anschliessend halt folgende expression gemacht hab: der string den ich (.+) muss ist(.+)hier. also kann es sein das er mühe mit der Unbekannten hat ? wie müsste ich meine expression gestalten das das ganze auch funzt ? |
Re: Platzhalter in einem String übertragen
also ich habe mich der unbekanten entledigt... daran sollte es also nicht liegen :-/
kann mir jemand einen tipp geben woran das liegen könnt das
Delphi-Quellcode:
niemals in die Bedingung reingeht ? muss doch definitiv an meiner regular expression liegen oder ?
if RE_NewState.Exec(Zeileasd) then//(LogToAnalyzeList[i]) then
begin NewState := RE_NewState.Match[0]; inc(MatchNewCounter); end;
Delphi-Quellcode:
aber ich hab cerstanden das das der punkt ein platzhalter für ein x beliebiges Zeichen ist und das + eine x beliebige anzahl von einem platzhalter für ein x beliebiges Zeichen.... liegt es daran ?
ExpressionNew := Stringreplace(FStateMachinePatern,'%%NewState%%','(.+)',rfIgnoreCase);
ExpressionOld := Stringreplace(FStateMachinePatern,'%%OldState%%','(.+)',rfIgnoreCase); RE_NewState.Expression := ExpressionNew; RE_OldState.Expression := ExpressionOld; |
Re: Platzhalter in einem String übertragen
habs gefunden... war nen logik fehler meinerseits ^^'
das ganze kann nicht matchen weil Old oder New State als platzhalter immernoch in der Expression drinne ist. Lösung: beide ersetzten und zuerst prüffen welcher platzhalter als erstes definiert ist und anschliessend die matches in der richtigen reienfolge auslesen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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