![]() |
String zwische zwei Zeichen lesen
Hallo Delphi freunde,
ich möchte aus ein Memofeld bestimmte wörter finden die zwischen zwei Zeichen sind. z.B $Heute$, $Morgen$ etc. nur was zwischen $ und $ kann varieren und daher weiß ich nicht wie ich das machen soll. eventuell kann mir jemand ein wenig helfen. Danke Robert |
Re: String zwische zwei Zeichen lesen
Probier es mal mit
![]() ![]() wie ist der Text im Memo jetzt genau aufgebaut? "$Heute$,$Morgen$" ?? 2 verschiedene Zeichen würde den Vorgang erheblich erleichtern! "$Heute#,$Morgen#" ansonsten mal eine Idee:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s: String; ergebnis: String; n: Integer; begin s := '$Heute$,$Morgen$,$Gähn$'; n := 1; while true do begin ergebnis := Copy(s,PosEx('$',s,n)+1,PosEx('$',s,n + 1) - PosEx('$',s,n) - 1); if ergebnis = '' then exit; ShowMessage(ergebnis); n := PosEx('$',s,PosEx('$',s,n)+1) + 2; end; end; |
Re: String zwische zwei Zeichen lesen
Guten Morgen StefanDP,
wow das ging ja schnell :) Wie mein memo aufgebaut ist weiß ich selber nicht da die Daten individuel sein können, ich habe eine Datenbak mit daten z.b ID, Text 1, Heute wird es lustig 2, 25.06.2004 3, Windows Xp für 5,- € etc der Memo: Hallo freunde $1$, weil ........ bitte beachten Sie das wir am $2$ geschloßen haben, aber bis dahin haben wir ein exta angebot für sie $3$. so zu sagen das man einmail ein text scheibt und später nur die Daten in der DB ändern muss. und genau das ist mein problem, da ich nach sachen suchen muss die ich nicht kenne :) danke mfg Robert |
Re: String zwische zwei Zeichen lesen
Falls ich alles richtig verstanden habe,
hast Du einen Text mit beliebig vielen, verschiedenen Platzhaltern, von denen manche auch öfters vorkommen können und die durch Einträge aus einer Datenbank ersetzt werden sollen. Hier ist eine kleine Funktion, die eine Ersetzung innerhalb eines Strings vornimmt.
Delphi-Quellcode:
Der Aufruf könnte wie folgt erfolgen:
Function FindAndReplace (var InSource : String; ToReplace, ToInsert : String) : Boolean;
var AtPosition, SizeToReplace : Integer; begin Result := False; AtPosition := Pos(ToReplace, inSource); SizeToReplace := Length(ToReplace); if AtPosition > 0 then // Erstes Zeichen = 1, es kann aber auch bei 0 eingefügt werden. begin Delete (InSource, AtPosition, SizeToReplace); // Den Platzhalter löschen Insert (ToInsert, InSource, AtPosition); // An seiner Stelle neuen Text einsetzen; Result := True; end; end;
Delphi-Quellcode:
wobei die Variablen Source, Replace und Insert aus der Datenbank eingelesen werden würden.
while FindAndReplace (Source,Replace,Insert) do // Schleife damit alle Vorkommnisse
// des Platzhalters gefunden werden gefunden werden begin // do nothing end; Memo1.Lines.Add (Source); Mit sonnigen Grüßen S. |
Re: String zwische zwei Zeichen lesen
Hallo Sivale,
danke für die Hilfe, ich schaue es mir heute noch genauer noch an, mal sehen ob alles so funktioniert wie ich es mir denke :) Danke mfg Robert |
Re: String zwische zwei Zeichen lesen
Hallo Sivale,
ich teste gerade dein code und bin auf ein problem gestosen, der wert ToReplace ist nicht in der Datenbank und daher kann ich nichts ersetzen, meine idee ist die ID nr aus der Datenbank zu benutzen und die zwischen 2 $(dollar) zeichen zu setzen im text muss ich dann dach den ersten $ und nach den letzten $ suchen, zb $irgenwas$, dann den inhalt zwischne $ und $ in der Datenbank suchen und das durch den ganzen sting $irgenwas$ ersetzen. Aber ich glaube was wird dann kompliziert :) was ist dann wenn man schreibt: Für 45$ $35$ id 35, bekommen Sie heute alles danke mfg Robert |
Re: String zwische zwei Zeichen lesen
Hallo rocksoft,
hat leider etwas länger gedauert. Ich schieb's mal auf's Wetter. Wie Du ja richtig andeutest, muss der Platzhalter eindeutig sein. Ein $ + irgendetwas + $ wäre an und für sich in Ordnung. Ein Konflikt mit dem Text lässt sich verhindern, weil Du ja ein Anfangs- und ein Endzeichen hast. Machbar ist es. Es geht aber auch einfacher Idee: Du baust in den Text eindeutige Platzhalter von folgendem Format: §$&001, §$&002, §$&003 ... Die Abfrage lautet nun:
Delphi-Quellcode:
Source und Insert kommen aus der Datenbank.
procedure InsertValues;
Var i : Integer; Replace : String; begin For i := 1 to YourTable.RecordCount do begin Replace := '§$&' + Format ('%.3d',[i]); // Format Funktion macht aus 1='001',aus 16 ='016' etc. while FindAndReplace (Source,Replace,Insert) do begin // do nothing end; Memo1.Lines.Add (Source); end; Natürlich wäre es am einfachsten, den Replace-String mit in die Datenbank hineinzunehmen. Hätte auch den Vorteil, dass Platzhalter und Wert "sich gegenüberstehen" und leichter editierbar sind. Du könntest auch alles in Files speichern und einlesen. Schreib einfach mal an was Du arbeitest, ich denke, das gesamte Problem läst sich auch einfacher lösen. Gruß S. |
Re: String zwische zwei Zeichen lesen
Hallo Sivale,
Zitat:
Zitat:
Der Code unten schaut schon sehr gut aus und werde später noch ein wenig damit testen, Zitat:
Nemmen wir an, ich habe 2000 Hardware Artikel, HDs, Cdroms, Cpus etc und jetzt bauen ich ein PC zusammen, also würde ich einfach schreben: Power PC XXL $100$ $120$ $33$ $254$ und sobald wie ich eine Rechnung schreibe, werden die variablen durch die artikel aus der DB ersetzt. somit bleit der Artikel inhalt recht klein und leicht zu verwalten, ob die idee gut oder schlecht ist, ist die andere frage. Besten Dank für die hilfe mfg Robert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 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