Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String-Inhalt nach Copy einfach weg (https://www.delphipraxis.net/151615-string-inhalt-nach-copy-einfach-weg.html)

ThYpHoOn 25. Mai 2010 12:18


String-Inhalt nach Copy einfach weg
 
Moin,

ich hab hier einen sehr langen String (laut length() über 10.000-Zeichen). Der ist im XML-Style gehalten und dort möchte ich nun einen bestimmten Abschnitt raus haben und wollte dies mit Copy machen. Doch danach ist der Destination- und Source-String leer.

Eventuell liegt es auch daran das ich den String aus einem OXC bekomme (als var) und deshalb nur ein Pointer weitergegeben wird?!

mkinzler 25. Mai 2010 12:23

Re: String-Inhalt nach Copy einfach weg
 
Zeig mal etwas Code

ThYpHoOn 25. Mai 2010 12:29

Re: String-Inhalt nach Copy einfach weg
 
Zitat:

Zitat von mkinzler
Zeig mal etwas Code

oWDSL ist mein OCX-Objekt, cTemp ist Übergabeparameter mit var.


Delphi-Quellcode:
oWDSL.GetStringGrid(GridInfo.Row,11, cTemp);
Jpg64 := Copy(cTemp,Pos('<picdata>',cTemp)+9,5);
// nach dem Copy ist cTemp und Jpg64 leer

mkinzler 25. Mai 2010 12:35

Re: String-Inhalt nach Copy einfach weg
 
Was für eine typ hat die Variable?

ThYpHoOn 25. Mai 2010 12:38

Re: String-Inhalt nach Copy einfach weg
 
Beides als String deklariert:
Delphi-Quellcode:
var cTemp : String;
Jpg64 : String;
Die Prozedur aus dem OCX ist ein Widestring (BSTR*):
Delphi-Quellcode:
    procedure GetStringGrid(ARow: Integer; ACol: Integer; var Dummy: WideString); stdcall;

mkinzler 25. Mai 2010 12:43

Re: String-Inhalt nach Copy einfach weg
 
Kopiere die Variable mal in eine loakle Variable

Delphi-Quellcode:
var
    cTemp : WideString;
    sTemp, Jpg64 : String;
...
    oWDSL.GetStringGrid(GridInfo.Row,11, cTemp);
    stemp := cTemp;
    Jpg64 := Copy(cTemp,Pos('<picdata>', sTemp)+9,5);

ThYpHoOn 25. Mai 2010 12:45

Re: String-Inhalt nach Copy einfach weg
 
Zitat:

Zitat von mkinzler
Kopiere die Variable mal in eine loakle Variable

Hatte ich auch schon versucht, mit dem Effekt das diese dann ebenfalls nach dem Copy leer ist.

uligerhardt 25. Mai 2010 12:52

Re: String-Inhalt nach Copy einfach weg
 
Zitat:

Zitat von mkinzler
Kopiere die Variable mal in eine loakle Variable

Delphi-Quellcode:
var
    cTemp : WideString;
    sTemp, Jpg64 : String;
...
    oWDSL.GetStringGrid(GridInfo.Row,11, cTemp);
    stemp := cTemp;
    Jpg64 := Copy(cTemp,Pos('<picdata>', sTemp)+9,5);

Ich würde außerdem noch den Aufruf von Pos extrahieren und prüfen.
Delphi-Quellcode:
idx := Pos('<picdata>', sTemp);
if idx > 0 then
  ...

ThYpHoOn 25. Mai 2010 13:17

Re: String-Inhalt nach Copy einfach weg
 
Fehler lag daran das ich nach dem ich den String geholt hatte ein weiteren OCX Aufruf gemacht habe (der zwar nichts mit der anderen Variable zu tun hat aber) der anscheinend dazu führt das der String (und alle sich darauf beziehnenden) aufeinmal leer sind.

Um es noch mal im Code auszudrücken:
So hat es nicht geklappt:
Delphi-Quellcode:
   
oWDSL.GetStringGrid(GridInfo.Row,11, cTemp);
oWDSL.AnzeigeTyp := 0;
if cTemp <> '' then begin
  cTmp := cTemp;
  Jpg64 := Copy(cTmp,Pos('<picdata>',cTmp)+9,Pos('</picdata>',cTmp)-Pos('<picdata>',cTmp)-9);
end;
und so klappt es:
Delphi-Quellcode:
   
oWDSL.GetStringGrid(GridInfo.Row,11, cTemp);
if cTemp <> '' then begin
  cTmp := cTemp;
  Jpg64 := Copy(cTmp,Pos('<picdata>',cTmp)+9,Pos('</picdata>',cTmp)-Pos('<picdata>',cTmp)-9);
end;
oWDSL.AnzeigeTyp := 0;
Wobei nach dem Aufruf von "oWDSL.AnzeigeTyp := 0;" cTemp immer wieder leer wird, obwohl es ja nur ein Setter ist... Was Delphi da macht keine Ahnung :S


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