AGB  ·  Datenschutz  ·  Impressum  







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

String zwische zwei Zeichen lesen

Ein Thema von rocksoft · begonnen am 7. Jun 2004 · letzter Beitrag vom 11. Jun 2004
Antwort Antwort
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#1

String zwische zwei Zeichen lesen

  Alt 7. Jun 2004, 00:35
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
Robert
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#2

Re: String zwische zwei Zeichen lesen

  Alt 7. Jun 2004, 00:48
Probier es mal mit Hier im Forum suchenCopy Pos bzw. Hier im Forum suchenPosEx

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;
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#3

Re: String zwische zwei Zeichen lesen

  Alt 7. Jun 2004, 01:12
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
Robert
  Mit Zitat antworten Zitat
Sivale

Registriert seit: 7. Sep 2002
Ort: München
8 Beiträge
 
#4

Re: String zwische zwei Zeichen lesen

  Alt 8. Jun 2004, 12:07
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:
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;
Der Aufruf könnte wie folgt erfolgen:

Delphi-Quellcode:
while FindAndReplace (Source,Replace,Insert) do // Schleife damit alle Vorkommnisse
                                               // des Platzhalters gefunden werden gefunden werden
    begin
    // do nothing
    end;
Memo1.Lines.Add (Source);
wobei die Variablen Source, Replace und Insert aus der Datenbank eingelesen werden würden.


Mit sonnigen Grüßen

S.
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#5

Re: String zwische zwei Zeichen lesen

  Alt 9. Jun 2004, 03:08
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
Robert
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#6

Re: String zwische zwei Zeichen lesen

  Alt 9. Jun 2004, 23:41
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
Robert
  Mit Zitat antworten Zitat
Sivale

Registriert seit: 7. Sep 2002
Ort: München
8 Beiträge
 
#7

Re: String zwische zwei Zeichen lesen

  Alt 11. Jun 2004, 10:08
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:
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;
Source und Insert kommen aus der Datenbank.

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.
Vom Leben nichts zu erwarten, ist das Geheimnis aller echten Heiterkeit.
George Bernard Shaw (1856-1950)
  Mit Zitat antworten Zitat
Benutzerbild von rocksoft
rocksoft

Registriert seit: 8. Mär 2003
54 Beiträge
 
Delphi XE5 Professional
 
#8

Re: String zwische zwei Zeichen lesen

  Alt 11. Jun 2004, 21:41
Hallo Sivale,

Zitat:
hat leider etwas länger gedauert. Ich schieb's mal auf's Wetter.
np, sage ich auch immer Ich bin schon froh wenn jemand hilft,

Zitat:
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.
da habe ich eine idee wie man es absichert könnte aber ob es dann 100% sicher ist, ist eine andere frage, man könnte ausschlißen das der zweite $ kein leer zeichen davor haben darf und es auf jeden fall ein interger wert sein muss, aber ich denke da wird es kompliziert

Der Code unten schaut schon sehr gut aus und werde später noch ein wenig damit testen,

Zitat:
Schreib einfach mal an was Du arbeitest, ich denke, das gesamte Problem läst sich auch einfacher lösen.
Ich denke das ist eine multi lösung für viele Anwendungs fälle, ich werde es für Briefe und Artikel benutzen.

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
Robert
  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 08:00 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