Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 23.01.06 19:05 
... weder das erste gefundene noch alle gefundenen!

Hallo!
Ich wende mich mal wieder an euch! Folgendes Problem:
Ich habe einen String, in dem ich ein bestimmtes Wort ersetzen will. StringReplace ist hier erstmal das Richtige. Nur soll nicht das erste oder alle Worte, sondern nur ein Wort, das mittendrin sein kann, ersetzt werden. Mein Programm ist ein Befehlsinterpreter, mit dem man unter anderem sogen. Aliase erstellen kann - selbstdefinierte Befehlsworte für vorhandene Befehle. In folgendem Beispiel ist "a" das Alias für den Befehl "attrib", _@alias ist eine Funktionsvariable in meinem Programm und der Befehl - also "attrib" - soll angezeigt werden:
ausblenden Delphi-Quelltext
1:
2:
3:
 echo Das ist der Befehl: _@alias a
 //erwartet wird als Ausgabe: Das ist der Befehl: attrib
 //ich erhalte aber: Dattribsist der Befehl:  a

Es soll 1. _@attrib völlig entfernt werden und 2. das a nach "_@attrib" durch den ermittelten Befehl ersetzt werden. Auch, wenn vor dem Wort "_@attrib" kein a vorkommt, klappt es nicht. Kein anderes Zeichen soll verändert werden, Gross-/Kleinschreibung soll erhalten bleiben.

Ach ja: Es kann sein, dass alle Worte bis auf echo in Anführungszeichen stehen:
ausblenden Delphi-Quelltext
1:
echo "Das" "ist" "der" "Befehl:" "_@alias" "@Alt x"					

Ich muss also ein Wort entfernen und das auf dieses folgende Wort ersetzen. Wie mache ich das?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 23.01.06 19:16 
Ich hab das jetzt 5 mal durchgelesen und weiß immer noch net genau welches Wort du haben willst o_O.

Aber versuch es mal mit Explode(); oder Pos(); und Copy();.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 23.01.06 19:32 
user profile iconGTA-Place hat folgendes geschrieben:
Ich hab das jetzt 5 mal durchgelesen und weiß immer noch net genau welches Wort du haben willst o_O.

Aber versuch es mal mit Explode(); oder Pos(); und Copy();.


Ich möchte _@attrib völlig entfernen das a nach "_@attrib" durch den ermittelten Befehl ersetzen. Aber nur dieses, wobei das aber nicht immer nur ein einzelner Buchstabe sein muss. Ok, lassen wir das mit den Anführungszeichen erstmal weg. Es geht also darum, das Wort nach dem Wort, in dem _@ vorkommt, zu ersetzen und das Wort, in dem _@ vorkommt, zu entfernen.

Mit StringReplace kommt man da nicht weit.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 23.01.06 22:06 
Mittlerweile habe ich mir etwas aus einem Memo mit SelStart, SelLength und SelText zusammengestoppelt, das funktioniert. Ich werde das nun auf ein Edit übertragen, das ich zur Laufzeit eigens für diesen Zweck erzeuge. Vielleicht geht es aber auch eleganter!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 23.01.06 23:56 
Hallo,

wenn ich Dein Vorhaben richtig verstanden habe,
dann versuch es mal damit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var sSuchStr, sFunkVar, sErg : String;
    p : Integer;
begin
  sSuchStr := 'echo Das ist der Befehl: _@alias a und der Text geht noch weiter';
  sFunkVar := '_@alias';
  //Suchen nach '_@alias ' und bis da bearbeiten
  p := Pos(sFunkVar,sSuchStr);
  sErg := Copy(sSuchStr,1,p-1);//bis alias sichern
  //abschneiden einschließlich '_@alias ' zum weiterverarbeiten
  Delete(sSuchStr,1,p+Length(sFunkVar));
  //wenn Alias nur ein Zeichen, dann so interpretieren
  case sSuchStr[1of //auf erstes zeichen zugreifen
   'a' : sErg := sErg+'attrib'+Copy(sSuchStr,2,MAXINT);
   't' : sErg := sErg+'time'+Copy(sSuchStr,2,MAXINT);
   //...
  end;
  //else, lass Dir was anderes einfallen {:-)}
  showmessage(sErg);
end;


Dürfte eleganter sein als dafür ein Edit-Feld zu mißbrauchen :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Di 24.01.06 18:04 
Hast du den gesamten Beitrag von mir oder nur die obere Hälfte gelesen?

GTA-Place hat folgendes geschrieben:
Aber versuch es mal mit Explode(); oder Pos(); und Copy();.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 24.01.06 23:51 
user profile iconGTA-Place hat folgendes geschrieben:
Hast du den gesamten Beitrag von mir oder nur die obere Hälfte gelesen?

Explode kennt mein Delphi6 nicht, mit Pos allein komme ich nicht weiter und Copy - naja, ich hab damit noch nie (ehrlich!) gearbeitet. Das Problem ist, es können praktisch alle Worte ident sein, aber nur das, das auf jenes mit _@ folgt, soll ersetzt werden.

Den Code von Lannes werde ich mir aber noch anschauen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!