![]() |
Teilstring in einen anderen String kopieren
Hallo zusammen!
Hab die Boardsuche und Google schon bemüht, aber nichts gefunden. Ich möchte ganz einfach aus einem String wie z.b. "blablabla'dfdf'" aus der Zwischenablage ab dem ersten Hochkomma den String auslesen, und in einen Variable scheiben. Bin schon halber am verzweifeln, weil ich den Fehler ned finden kann:
Delphi-Quellcode:
Aber es funktioniert nicht, d ist leer also ' ' auch wenn man davor d einen wert zuweist.
procedure TForm1.Timer1Timer(Sender: TObject);
var I,k:Integer; begin if Clipboard.Hasformat(CF_TEXT) then begin c := clipboard.AsText; if y = false then exit; // sicherung, dass die schleife nur 1 mal durchlaufen wird for i:=0 to length(c) do begin if c[i] = '''' then //sobald ein Hochkomma vorhanden ist... begin for k := 0 to length(c)-2 do //...wird der string ab da in die variable d geschrieben begin d[k] := c[i+1]; //c+1 damit der das erste hochkomma nicht mitgeschrieben wird //und length(c)-2 damit das 2te hochkomma nicht mitgeschrieben wird end; y:= false; //sicherung wird gesetzt end; end; end; edit1.text := d; end; Des weitern kommt dann noch ein Fehler, wenn man das Programm dann beendet: "Exeption EInvalidPointer in Modul Project1.exe...." Hat jemand ne Idee? |
Re: Teilstring in einen anderen String kopieren
|
Re: Teilstring in einen anderen String kopieren
Delphi-Quellcode:
So in etwa.
x := Copy('blablabla'dfdf', Pos('blablabla'dfdf', '''), length('blablabla'dfdf'));
Florian |
Re: Teilstring in einen anderen String kopieren
Delphi-Quellcode:
an der Stelle z.B. schreibst du x-mal in d[k] immerwieder den gleichen wert c[i+1] irgendwas mit c[i+k] könnte passen .. aber eigentlich würde ich dir auch eher zu Pos raten.
for k := 0 to length(c)-2 do //...wird der string ab da in die variable d geschrieben
begin d[k] := c[i+1]; //c+1 damit der das erste hochkomma nicht mitgeschrieben wird //und length(c)-2 damit das 2te hochkomma nicht mitgeschrieben wird end; da kannste dann alles in "einer zeile" machen. Edit: Zitat:
und das "'blablabla'dfdf'" is dann das clipboard.AsText |
Re: Teilstring in einen anderen String kopieren
Mhmm..., das was Florian Bernd da schreibt ist eigentlich logisch...
aber es scheint nicht zu funktionieren. (achja, das ' wird zu ''). Hier mal meine Version (hab's getestet):
Delphi-Quellcode:
guut..., das ist eigentlich n bissle umständlich..., aber mir fällt grad nix anderes ein...
var s:String;
var i, copy_to:integer; begin s:=Clipboard.AsText; for i:=1 to length(s) do begin if s[i] = '''' then begin copy_to:=i; end; end; ShowMessage(copy(s,1,copy_to-1)); end; Greetz by Hux :dp: Edit: "da schreibt" eingefügt... :lol: restlichen 3mal: Grammatikfehler im 1. Satz verbessert -.- |
Re: Teilstring in einen anderen String kopieren
wie wäre es mit
Delphi-Quellcode:
gruß Evian
if pos(chr(39),c) <> 0 THEN
BEGIN edit1.text := copy(c,pos(chr(39)+1,c),length(c)) END else edit1.text := 'Kein Hochkomma vorhanden'; |
Re: Teilstring in einen anderen String kopieren
@huxxx: also wenn ich das nach deiner procedure mache, gibt er mir den gleichen text aus, aber er entfernt das letzte hochkomma.
Also aus dem text blablabla'dfdf' wird blablabla'dfdf Die anderen Vorschläge bin ich grad am ausprobieren. |
Re: Teilstring in einen anderen String kopieren
Delphi-Quellcode:
So gehts aber.
Copy('blablabla''dfdf''', Pos('''', 'blablabla''dfdf'''), length('blablabla''dfdf'''));
Rauskommt: 'dfdf Ohne das Hochkomma am Anfang:
Delphi-Quellcode:
Florian
Copy('blablabla''dfdf''', Pos('''', 'blablabla''dfdf''') -1, length('blablabla''dfdf'''));
|
Re: Teilstring in einen anderen String kopieren
@evian: das funktioniert irgenwie nicht, bringt den fehler "inkompatible typen"
|
Re: Teilstring in einen anderen String kopieren
das passiert wenn man zuschnell was zusammenkliert.
aus edit1.text := copy(c,pos(chr(39)+1,c),length(c)) muss natürlich edit1.text := copy(c,pos(chr(39),c)+1,length(c)) werden. gesammt wäre das dann follgendes:
Delphi-Quellcode:
der code gibt dir aber nur den Teilstring vom ersten Hochkomma bis zum ende des Clipboardtextes, wenn Du den Text zwichen 2 Hochkammas haben willst, musst Du den Code natürlich entsprechend anpassen, bzw. noch mal posten.
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Clipboard.Hasformat(CF_TEXT) then begin c := clipboard.AsText; if pos(chr(39),c) <> 0 THEN BEGIN edit1.text := copy(c,pos(chr(39),c)+1,length(c)) END else edit1.text := 'Kein Hochkomma vorhanden'; end; end; EDIT: Ist c eine globale String-Variabel?! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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 by Thomas Breitkreuz