AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

String-Inhalt nach Copy einfach weg

Ein Thema von ThYpHoOn · begonnen am 25. Mai 2010 · letzter Beitrag vom 25. Mai 2010
Antwort Antwort
ThYpHoOn

Registriert seit: 8. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#1

String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:18
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?!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.595 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:23
Zeig mal etwas Code
Markus Kinzler
  Mit Zitat antworten Zitat
ThYpHoOn

Registriert seit: 8. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:29
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.595 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:35
Was für eine typ hat die Variable?
Markus Kinzler
  Mit Zitat antworten Zitat
ThYpHoOn

Registriert seit: 8. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:38
Beides als String deklariert:
Delphi-Quellcode:
var cTemp : String;
Jpg64 : String;
Die Prozedur aus dem OCX ist ein Widestring (BSTR*):
    procedure GetStringGrid(ARow: Integer; ACol: Integer; var Dummy: WideString); stdcall;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.595 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:43
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);
Markus Kinzler
  Mit Zitat antworten Zitat
ThYpHoOn

Registriert seit: 8. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.682 Beiträge
 
Delphi 2007 Professional
 
#8

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 12:52
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
  ...
Uli Gerhardt
  Mit Zitat antworten Zitat
ThYpHoOn

Registriert seit: 8. Jan 2008
52 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: String-Inhalt nach Copy einfach weg

  Alt 25. Mai 2010, 13:17
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf