AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Platzhalter in einem String übertragen

Ein Thema von gibb · begonnen am 28. Apr 2008 · letzter Beitrag vom 29. Apr 2008
Antwort Antwort
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#1

Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:07
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:16
Sollte über reguläre ausrücke lösbar sein.
Markus Kinzler
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:18
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..

wer ein gutes tutorial oder ne unit für delphi kennt darf mir gerne nen link servieren.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:24
Daniel hat am letzten Delp-Stammtisch einen Votreag über dieses thema gehalten:
http://www.delphipraxis.net/internal...t.php?p=812520
Markus Kinzler
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:29
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...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 13:37
http://www.delphipraxis.net/video#Stammtisch_2
Markus Kinzler
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#7

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 14:15
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 ?
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Platzhalter in einem String übertragen

  Alt 28. Apr 2008, 16:26
Delphi-Quellcode:
   if RE_NewState.Exec(LogToAnalyzeList[i]) then
     begin
       NewState := RE_NewState.Match[0];
     end;
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 ?
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 ?
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Platzhalter in einem String übertragen

  Alt 29. Apr 2008, 07:50
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:
 if RE_NewState.Exec(Zeileasd) then//(LogToAnalyzeList[i]) then
     begin
       NewState := RE_NewState.Match[0];
       inc(MatchNewCounter);
     end;
niemals in die Bedingung reingeht ? muss doch definitiv an meiner regular expression liegen oder ?

Delphi-Quellcode:
  ExpressionNew := Stringreplace(FStateMachinePatern,'%%NewState%%','(.+)',rfIgnoreCase);
  ExpressionOld := Stringreplace(FStateMachinePatern,'%%OldState%%','(.+)',rfIgnoreCase);
  RE_NewState.Expression := ExpressionNew;
  RE_OldState.Expression := ExpressionOld;
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 ?
  Mit Zitat antworten Zitat
gibb

Registriert seit: 12. Sep 2007
Ort: Bern
178 Beiträge
 
Delphi 2006 Architect
 
#10

Re: Platzhalter in einem String übertragen

  Alt 29. Apr 2008, 09:47
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
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