[Gelöst] Textvariable teilen

27. November 2009 12:05

Hallo Forum!

ich bin auf der Suche nach einer Möglichkeit einen Textstring zu zerpflücken und in mehreren Textvariablen zu speichern.
Textvariablen:
x1
x2
x3
Trennzeichen: '|'
Textstring := 'abc|dfrsgt|u 52 dij|'

jetzt möchte ich gern, dass das
abc in x1
dfrsgt in x2
u 52 dij in x3
gespeichert wird.
Wie kann ich das am günstigsten anstellen?
Zuletzt geändert von svr am 27. November 2009 15:18, insgesamt 1-mal geändert.

Re: Textvariable teilen

27. November 2009 12:10

Um nur mal in die richtige Richtung zu lenken:

DELSTR
COPYSTR
und
STRPOS

sind die Funktionen die du brauchst!

Re: Textvariable teilen

27. November 2009 12:14

Danke, Danke, in die Richtung bewege ich mich schon, muss nur die Logik irgendwie hinkriegen, da verzettelt man sich so leicht, bzw. artet das in reichlich Zeilen Code aus. :-(

Re: Textvariable teilen

27. November 2009 12:15

svr hat geschrieben:Danke, Danke, in die Richtung bewege ich mich schon, muss nur die Logik irgendwie hinkriegen, da verzettelt man sich so leicht, bzw. artet das in reichlich Zeilen Code aus. :-(

Du lernst es nur, indem du es selbst versuchst und aus deinen Fehlern lernst. Zeig uns doch mal, was du dir bisher damit ausgedacht hast.

Re: Textvariable teilen

27. November 2009 12:30

Nur kein Druck :-D
Wir fangen mal klein an:
Code:
Textstring := 'abc|dfrsgt|u 52 dij';

for i := 1 to strlen(Textstring) do begin
  if textstring[i] = '|' then
    Message('%1  %2',i,textstring[i])
end;

Damit kriege ich zumindest schonmal die Stelle heraus, wo das Trennzeichen ist.

Re: Textvariable teilen

27. November 2009 12:35

svr hat geschrieben:Nur kein Druck :-D

Niemals ;-)

Wir fangen mal klein an:

Meine ich doch! :-)

Damit kriege ich zumindest schonmal die Stelle heraus, wo das Trennzeichen ist.

Ist doch ein super Anfang.
Wie würdest du in deinen eigenen Worten erklären, was die nächsten Schritte sind - was tun mit der Info, wo die Trennzeichen sind?

Re: Textvariable teilen

27. November 2009 12:37

noch eine Frage: sind es immer Fix 3 Variablen die gefüllt werden muessen? nie mehr oder weniger?

Re: Textvariable teilen

27. November 2009 12:39

Immer fix.

@Natalie:
ich würde den String von Pos 1 bis zu der Stelle in die Variable x1 kopieren, und danach den Teil löschen und beim 2. Durchlauf wieder von 1 bis '|' in Variable 2 schreiben und löschen und beim 3. Durchlauf von Pos 1 bis zum Ende in Variable 3 schreiben.
oder man kopiert von 1 bis '|' in x1 -> Zeiger eins nach rechts usw.....

Re: Textvariable teilen

27. November 2009 15:09

Meine noch nicht ganz zufriedenstellende Lösung:
(ich habe außer dem Pipe noch die Raute und das Ende der Zeile als Trennzeichen)

Code:
z := 1;
  for i := 1 to strlen(Textstring) do begin
    if (textstring[i] = '|') or (textstring[i] = '#') then begin
      Teilstring := Copystr(textstring,z,i-z );
      Message('%1',Teilstring);
      Z := i+1;
    end;
    if i = strlen(textstring) then begin
      Teilstring := Copystr(textstring,z,i);
      Message('%1',Teilstring);
    end;
  end;


Es geht bestimmt noch eleganter, also wer noch Vorschläge hat, bitte posten.

Re: [Gelöst] Textvariable teilen

27. November 2009 15:26

Ich muss sagen, mein Vorschlag sieht auch nicht gerade toll aus, aber so in etwa würde ich das ganze machen^^

Code:
FOR i:=1 TO 3 DO BEGIN
  position := STRPOS(text,'|');
  IF position > 0 THEN BEGIN
    x[i] := COPYSTR(text,1,position-1);
    text := COPYSTR(text,position+1);
  END ELSE
    x[i]:=COPYSTR(text,1);
END;


Edit:
Und zum Anzeigen dann z.B. sowas:
Code:
FOR i:=1 TO 3 DO
  MESSAGE('%1',x[i]);

Re: [Gelöst] Textvariable teilen

27. November 2009 15:35

Falls keine Kommata in dem Text vorkommen, ginge das auch:
Code:
String:=Copystr(String,1,strlen(String)-2); // angenommen, der String ist vom Format x..x|x..x|x..x|#
String:=ConvertStr(String,'|',',');
for i:=1 to 3 do
  Teiltext[i]:=Selectstr(i,String);

Re: [Gelöst] Textvariable teilen

29. November 2009 16:15

Das sieht doch richtig gut aus.
Danke! :-D