Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text an einer bestimmten stelle kopieren (https://www.delphipraxis.net/2502-text-einer-bestimmten-stelle-kopieren.html)

The Re@l 26. Jan 2003 16:52


Text an einer bestimmten stelle kopieren
 
Code:
ajfsp://file|Versuch|E6940DEB8DA42DBAF6A4E458A994B271|836987424/
Ich möchte nur das Wort Versuch aus dem Text haben, da es aber variable ist, dachte ich mir das mann es so machen könnte das er nur den Text zwischen | | rauskopieren könnte. Geht das so ohne weiteres?

Hilfe wäre super!
The Re@l

Sharky 26. Jan 2003 17:04

Re: Text an einer bestimmten stelle kopieren
 
Zitat:

Zitat von The Re@l
... könnte das er nur den Text zwischen | | rauskopieren könnte. Geht das so ohne weiteres? ...

Geht ganz einfach.

Stichwörter

Copy und Pos

Schau mal in der OnlineHilfe.

The Re@l 26. Jan 2003 18:15

so richtig verstehen tu ich es ja nicht was da Steht. von daher lern ich erstmal wider aus dem Buch.

bis dann

The Re@l

Sharky 26. Jan 2003 18:30

Zitat:

Zitat von The Re@l
so richtig verstehen tu ich es ja nicht was da Steht. von daher lern ich erstmal wider aus dem Buch.

Die Funktion POS liefert dir die Start Position von einen Substring.

z.B.:

Pos ('ist','Dies ist ein Test') liefert 6 als ergebniss (ist beginnt an der sechsten stelle des Strings.

In einem Fall müsstest Du nach dem ersten auftauchen von "|" suchen.
Dann von dieser Position + 1 in eine Stringvariable kopieren. Damit hast Du einen String der mit dem Wort das duch haben möchtest beginnt.

Jetzt suchst Du nach dem nächsten "|" und kopierst einfach vom anfang deines neuen Strings bis zu der gefundenen Position -1.

Tpercon 26. Jan 2003 18:31

Ganz einfach!
Über Pos oder Ansipos ermittelst du das ERSTE Vorkommen deines Trennzeichens. Anschließend löschst du alle Zeichen bis dahin aus dem String ( Delete() ). Nun suchst du wieder mittels Ansipos dein (jetzt ja das zweite) Trennzeichen und kopierst dann mit Copy alles bis zu dieser Stelle aus dem String. Dein Kopiertes ist jetzt das Wort Versuch.

Gruß

The Re@l 27. Jan 2003 07:17

sorry wenn ich nerve :oops:

Code:
procedure TForm1.FormCreate(Sender: TObject);
 var
 x, y: integer;
 m: array[1..3] of char;
begin

AjLink.PasteFromClipboard;
  m[1] := '|';
  m[2] := '|';
  m[3] := '|';

  x := pos (m[1], ajlink.Text);
  y := pos (m[2], ajlink.Text);

  linkname.Text := copy (ajlink.Text, x +1, y );

end;

das tut´s ein bisschen, aber nich richtig. Was is denn daran Falsch.

Sharky 27. Jan 2003 08:02

Zitat:

Zitat von The Re@l
sorry wenn ich nerve :oops:

Code:
procedure TForm1.FormCreate(Sender: TObject);
 var
 x, y: integer;
 m: array[1..3] of char;
begin

AjLink.PasteFromClipboard;
  m[1] := '|';
  m[2] := '|';
  m[3] := '|';

  x := pos (m[1], ajlink.Text);
  y := pos (m[2], ajlink.Text);

  linkname.Text := copy (ajlink.Text, x +1, y );

end;

das tut´s ein bisschen, aber nich richtig. Was is denn daran Falsch.

Erstmal zu deinem "Fehler"

Du rufst zweimal hintereinander Pos mit den gleichen Werten auf.
Darum bekommen x und y auch zweimal die Gleiche Position zugewiesen.

Pos liefert immer die erste gefundene Position der gesuchten Zeichenfolge. Auch wenn diese mehrmal in deinem String vorkommt !!!

Hier mal etwas code.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 tmp_string  : String;
 trenn_pos   : Integer;
 trennzeichen : Char;
begin
 tmp_string := ajlink.Text;  // zur Manipulation arbeite ich nur mit tmp-variablen
 trennzeichen := '|';  // Dein Trennzeichen
 trenn_pos := pos (trennzeichen, tmp_string); // Position des ersten |
 Delete (tmp_string,1,trenn_pos); //alles vor dem ersten | löschen
 trenn_pos := pos (trennzeichen, tmp_string); // Position des nächsten | (da das erste gelöscht wurde, ist dies jetzt auch wieder das erste
 Delete (tmp_string,trenn_pos,Length(tmp_string)); // vom Trennzeichen (ink.) bis zum ende des Strings löschen
 linkname.Caption := tmp_string;
end;
[/b]

The Re@l 27. Jan 2003 08:11

Ich danke Dir :!:

Jetzt hats auch geklingelt. Aller anfang ist schwer :( .


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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