Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   VerySimpleXML: Problem unter iOS? (https://www.delphipraxis.net/178157-verysimplexml-problem-unter-ios.html)

cydo 20. Dez 2013 15:55

AW: VerySimpleXML: Problem unter iOS?
 
Für Beispiele wäre ich dankbar, danke

Insider2004 20. Dez 2013 16:04

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von cydo (Beitrag 1240574)
Für Beispiele wäre ich dankbar, danke

Copy(Line, 1, 1) = 'x'

funtioniert immer und überall.

mkinzler 20. Dez 2013 16:10

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von cydo (Beitrag 1240574)
Für Beispiele wäre ich dankbar, danke

Delphi-Quellcode:
const
{$IFDEF NEXTGEN}
 LowBoundry=0;
{$else}
 LowBoundry=1;
{$ENDIF}

himitsu 20. Dez 2013 16:13

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Delphi-Quellcode:
{$ZEROBASEDSTRINGS OFF}

Das ist doch nicht wirklich deren Ernst?

@mkinzler:
Ich hatte mich vor ein paar Tagen zwar im Delphi-Code gewundert,
aber langsam bekommt das eine "Sinn", auch wenn ich es für "Unsinn" halte, das einfach so ein jahrzehntelange Standardverhalten zu ändern, ohne es laut zu sagen.
Delphi-Quellcode:
s[Low(string)] = s[1] {von früher}

mkinzler 20. Dez 2013 16:17

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von himitsu (Beitrag 1240579)
Zitat:

Delphi-Quellcode:
{$ZEROBASEDSTRINGS OFF}

Das ist doch nicht wirklich deren Ernst?

@mkinzler:
Ich hatte mich vor ein paar Tagen zwar im Delphi-Code gewundert,

Delphi-Quellcode:
s[Low(string)] = s[1] {von früher}

Low(string)/High(string) ist natürlich noch besser :thumb:

himitsu 20. Dez 2013 16:21

AW: VerySimpleXML: Problem unter iOS?
 
Delphi-Quellcode:
High(string)
(der Typ) vielleicht nicht unbedingt (so lang ist
Delphi-Quellcode:
s
bestimmt nicht), aber
Delphi-Quellcode:
High(s)
ginge vermutlich.


Zitat:

(aua aua)
Ich glaub, ich hab das jetzt verstanden. :lol:


[edit]
Ich hatte vorhin in das "scheinbar" Aktuellste reingeguckt (1.1), merk aber, daß es doch schon "etwas" älter ist.
http://blog.spreendigital.de/2011/11...er-and-writer/

Hatte ich hier nicht grade irgendwas von 1.4 gelesen?
[edit] gesehn ... werd dann mal meine Änderungen dort reinmigrieren.


Ach ja, ich bedank mich dann auch mal.
Wurde vor 'ner knappen Woche gefragt, ob meine XML-Klasse iOS-fähig ist und kann das jetzt zu 99% verneinen.
Menno, dann hab ich im Januar ja doch noch mehr dort umzubauen.
(mangels passendem Delphi hätt' ich mich da totgesucht :wall:)

Bernhard Geyer 20. Dez 2013 17:37

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von himitsu (Beitrag 1240579)
Zitat:

Delphi-Quellcode:
{$ZEROBASEDSTRINGS OFF}

Das ist doch nicht wirklich deren Ernst?

aber langsam bekommt das eine "Sinn", auch wenn ich es für "Unsinn" halte, das einfach so ein jahrzehntelange Standardverhalten zu ändern, ohne es laut zu sagen.

Man sagt es doch laut. Aber hört jemand zu?

http://docwiki.embarcadero.com/RADSt...S_from_Desktop
http://blog.marcocantu.com/blog/tstr...delphixe3.html
http://blog.blong.com/2012/10/new-co...elphi-xe3.html
http://blogs.embarcadero.com/medingt...tstringhelper/

himitsu 20. Dez 2013 17:48

AW: VerySimpleXML: Problem unter iOS?
 
Ohh, hatte man hier nie was von gehört.

Gut, beim Migrieren weiß man das nun, jetzt muss man es nur noch wissen, wenn man etwas neu entwickelt.

Aber ich finde es dennoch etwas "unglücklich", da es ja bei X-Plattform ja nun noch mehr "grundlegende" Unterschiede gibt.

romber 20. Dez 2013 22:32

AW: VerySimpleXML: Problem unter iOS?
 
Vielen Dank an alle beteiligten für die Hilfe! Muss erst mal die Beiträge durchlesen, verstehe noch nicht ganz, wo das Problem lag.

Bernhard Geyer 20. Dez 2013 22:56

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von himitsu (Beitrag 1240593)
Aber ich finde es dennoch etwas "unglücklich", da es ja bei X-Plattform ja nun noch mehr "grundlegende" Unterschiede gibt.

Die Aussage ist (jedenfalls soweit ich es verstehe) das der LLVM-Basierte Compiler (der auch Null-Basierte Strings mitbringt) die Zukunft ist.
Für mobile Platformen wird's nur den neuen Compiler geben (und kein Versuch mehr weiter den jetzigen Uraltcompiler weiter zu maltretieren im ihn auf ARM zu bringen).
*Irgendwann* (wenn er LLVM soweit ist) wird auch der "normale" Windows Compiler durch den neuen LLVM-Compiler ersetzt.

Auf den Webseiten (und im internet) findet man einiges zum Thema LLVM und Delphi.

Insider2004 21. Dez 2013 01:22

AW: VerySimpleXML: Problem unter iOS?
 
Da gibts noch einen Fehler in VerySimpleXML: Wenn das XML-File keine CRLF enthält (Ident=0, LineBreak=''), kommt man beim Lesen in eine Endlosschleife.

himitsu 21. Dez 2013 02:06

AW: VerySimpleXML: Problem unter iOS?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Knallt Die auch?
Im Windows macht sie es im Testprogramm zumindestens nicht. (nach Compact, wird die, im Save, ohne Zeilenumbrüche eingelesen)
Wenn ich dann wieder aufgewacht bin, kann ich gern was dazu sagen.


LLVM: Dann freu ich mich schon darauf, wenn bald auch noch die VCL-Apps knallen.

Union 21. Dez 2013 10:02

AW: VerySimpleXML: Problem unter iOS?
 
Das hat nichts mit LLVM zu tun sondern mit der falschen Umsetzung in der RTL.

Insider2004 21. Dez 2013 10:39

AW: VerySimpleXML: Problem unter iOS?
 
LLVM ist der größte Misst, weil es 0,0 in die Emba-Toolchain passt und total verbuggt ist. Aber wir sollten hier den schönen VerySimpleXML-Thread nicht mit LLVM verseuchen.

Insider2004 21. Dez 2013 11:42

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von himitsu (Beitrag 1240646)
Knallt Die auch?
Im Windows macht sie es im Testprogramm zumindestens nicht. (nach Compact, wird die, im Save, ohne Zeilenumbrüche eingelesen)

Kann ich nicht testen. Läuft nicht mit Delphi 7. Du kannst aber mal ein 1 MB xml File erstellen ohne CRLF. Alles in einer Zeile. Ich wette, das Ding frisst sich beim Laden.

cydo 21. Dez 2013 12:12

AW: VerySimpleXML: Problem unter iOS?
 
@romber:
Das Problem liegt in der Suche des ersten Zeichens eines Strings: beim "normalen" Windows-Delphi Compiler geht das so mit S[1] während die Standardeinstellungen beim neuen Compiler (iOS/Android) man bei 0 anfangen muss: S[0].
Du kannst vorrübergehend einfach in der XML-Unit oben ein {$ZEROBASEDSTRINGS OFF} einfügen, dann gehts auch. Ich werde aber die Unit umschreiben dass diese nun S[Low(String)] (Danke für diese Lösung, ist sicher schneller als copy) verwendet, dann gehts auch mit allen anderen Delphi-Compilern (D2009 und aufwärts, da Generics verwendet werden).

Einzeilige XMLs sollten kein Problem sein. macht er ja auch selber in der Demo. Ich habe aber noch einige Fixes, die noch nicht in eine offizielle Version eingegangen sind, ich werde die nächsten Tage diese einpflegen und eine 1.5 daraus machen (ich gebe hier Bescheid, wenns fertig ist).

Insider2004 21. Dez 2013 15:44

AW: VerySimpleXML: Problem unter iOS?
 
Problem analysiert: Die Engstelle ist GetText. Bei jedem Tag wird der gesamte XML-File-Inhalt durch die Funktion geschleust. In meinem Beispiel hat das XML-File 2.5MB und 30000 Tags, keine CRFL. Nicht sooo groß, würde ich sagen. Das sind dann 30000 Tags * 2.5MB = 75000 MB = 75GB !!!, die umgeschaufelt werden. Bei mir läuft das jetzt seit über 20 Minuten.

romber 21. Dez 2013 15:50

AW: VerySimpleXML: Problem unter iOS?
 
@cydo
Vielen Dank für die umfassende Hilfe an Sie und alle anderen.

Ich habe die Unit für den eigenen Bedarf auch ein wenig angepasst, indem ich die Text-Eingeschaft der Node und die Attribute-Value als Variant deklariert habe. So vermeide ich unnötige umwandlungen von String in Integer oder Boolean. Nur als Verbesserungsvorschag für die nächte Version.

Vielen Dank!

himitsu 22. Dez 2013 13:48

AW: VerySimpleXML: Problem unter iOS?
 
Das GetText ist eines der Engstellen (wenn auch die Größte) ... dieses hatte ich etwas abgeändert, so daß erst gesucht und dann der Text als ein Stück rauskopiert und gelöscht wird.
Das macht dann ein Insert+Delete pro Tag (jeweils von < bis >) und dann nochmal pro Part (die Einzelteile im Tag) und nicht mehr überall pro einzelnes Zeichen.
> siehe ExtractText ... umbenannt, da es den Text ausschneidet und nicht "nur" ausliest.

@Romber:
Eigentlich wäre es einfacher dort AsBool-, AsInt-, AsFloat-, AsDate-Property einzubauen, denn spätestens beim Float und TDateTime wird es "schlimm",
denn da nimmt der Variant die Systemeinstellungen.
- Beim Float das Dezimaltrennzeichen der aktuellen Sprache, aber eine XML ist Englisch und "muss" immer nur in einer Sprache sein, denn sonst schreibst du den Float in einer Sprache (z.B. Deutsch mit Komma als "Komma") und beim Auslesen in einer anderen Sprache (z.B. Englisch mit Punks als "Komma") da hast du dann deinen "Spaß".
- Und beim Datetime genauso, dort wird das Systemformat vom DateTimeToStr verwendet, was sich auch unterscheidet und eigentlich hat da XML sogar sein eigenes "Standard"-Format.
(bei meiner XML-Klasse hatte ich mir daher einen eigenen "Variant" gebastelt, aber hier soll es ja "Simple" sein :angel2:)

Insider2004 22. Dez 2013 14:57

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von himitsu (Beitrag 1240765)
Das GetText ist eines der Engstellen (wenn auch die Größte) ... dieses hatte ich etwas abgeändert, so daß erst gesucht und dann der Text als ein Stück rauskopiert und gelöscht wird.
Das macht dann ein Insert+Delete pro Tag (jeweils von < bis >) und dann nochmal pro Part (die Einzelteile im Tag) und nicht mehr überall pro einzelnes Zeichen.
> siehe ExtractText ... umbenannt, da es den Text ausschneidet und nicht "nur" ausliest.

Das ist immerhin besser, als die alte Lösung, da Insert und Delete sehr teuer sind.

Vielleicht wäre es auch einfacher, den einen Monster-string beim Laden einfach in mehrere kleine von z.b. 200er Länge zu zerhacken. Der Algo sollte das trotzdem fressen, da ja die nächste Line nachgeladen wird, wenn die alte abgearbeitet ist.

Insider2004 22. Dez 2013 15:07

AW: VerySimpleXML: Problem unter iOS?
 
Performed nicht schlecht bis jetzt:

XML file: ~220 KB

read write
MSDOM 2.5 18.6
ADOM 10.5 35.3
OmniXMLKluug 3.3 5.0
VerySimpleXML 1.0 1.0
AlcinoeXML Error

normiert, kleiner ist schneller.

creed steiger 22. Dez 2013 16:23

AW: VerySimpleXML: Problem unter iOS?
 
nativxml könnte man noch benchmarken


https://code.google.com/p/simdesign/...ib%2Fnativexml

http://www.simdesign.nl/xml.html

Insider2004 22. Dez 2013 16:31

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von creed steiger (Beitrag 1240780)

Geht nicht. NativeXML ist völlig inkompatibel zu TXMLDocument.

himitsu 22. Dez 2013 17:25

AW: VerySimpleXML: Problem unter iOS?
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hier im Forum suchenhimXML ... in dem einem Unterverzeichnis liegen noch ein paar XML-Klassen anderer Entwickler.

Die "aktuellen" Version von himXML sind aber bis maximal D2006/TDE abwärskompatibel und das wird sich auch nicht ändern, da es einfach zu viel Aufwand ist, wenn man noch eine ordentliche Code-Struktur und nette RTL&Compiler-Features nutzen möchte.
Eine der Älteren bis D7 (ich glaub jemand verwendete die auch in D5).


Zitat:

Zitat von Insider2004 (Beitrag 1240771)
Vielleicht wäre es auch einfacher, den einen Monster-string beim Laden einfach in mehrere kleine von z.b. 200er Länge zu zerhacken. Der Algo sollte das trotzdem fressen, da ja die nächste Line nachgeladen wird, wenn die alte abgearbeitet ist.

Du hast eigentlich Recht, das könnte man.
Delphi-Quellcode:
  // splitt long lines
  I := 0;
  while I < Lines.Count do
  begin
    if Length(Lines[I]) > 10000 then
    begin
      Lines.Insert(I + 1, Copy(Lines[I], 10000 + Low(string)));
      Lines[I] := LeftStr(Lines[I], 10000);
    end;
    Inc(i);
  end;

  for I := 0 to Lines.Count - 1 do
  ...

Insider2004 22. Dez 2013 22:23

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Delphi-Quellcode:
  // splitt long lines
  I := 0;
  while I < Lines.Count do
  begin
    if Length(Lines[I]) > 10000 then
    begin
      Lines.Insert(I + 1, Copy(Lines[I], 10000 + Low(string)));
      Lines[I] := LeftStr(Lines[I], 10000);
    end;
    Inc(i);
  end;

  for I := 0 to Lines.Count - 1 do
  ...

Das geht auf keinen Fall.

himitsu 22. Dez 2013 23:10

AW: VerySimpleXML: Problem unter iOS?
 
Noch nicht optimiert genug? :roll:

Delphi-Quellcode:
  // splitt long lines
  for I := Lines.Count - 1 downto 0 do
  begin
    if Length(Lines[I]) > 1000 then
    begin
      for I2 := Length(Lines[I]) div 1000 - 1 downto 0 do
        Lines.Insert(I + 1, Copy(Lines[I], (I2 * 1000) + Low(string), 1000));
      Delete(I);
    end;
  end;

Sir Rufo 23. Dez 2013 09:35

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von cydo (Beitrag 1240570)
Naja, was gibts denn für ne *schöne* plattformübergreifende Alternative um auf das erste Zeichen im String zuzugreifen (etwa StringBuilder?) ohne Zerobased off zu verwenden?
Also

Delphi-Quellcode:
if (Length(Line) > 0) and (Line[1]='x') then
 bla
?

Wie wäre es damit?
Delphi-Quellcode:
if (Length(Line) > 0) and (Line[Low(Line)]='x') then
 bla
upps, hatten wir ja schon :)

himitsu 23. Dez 2013 11:12

AW: VerySimpleXML: Problem unter iOS?
 
Delphi-Quellcode:
if Copy(MeineOrdentlichSprechendeVariable, 1, 1) = 'x' then // nääääää und würde in einem Benchmark gnadenlos ausscheiden
if LeftStr(MeineOrdentlichSprechendeVariable, 1) = 'x' then // nääääää
if FirstCharIs(MeineOrdentlichSprechendeVariable, 'x') then
if CharIs(MeineOrdentlichSprechendeVariable, 1, 'x') then
if (MeineOrdentlichSprechendeVariable <> '') and (MeineOrdentlichSprechendeVariable[1] = 'x') then
if (Length(MeineOrdentlichSprechendeVariable) > 0) and (MeineOrdentlichSprechendeVariable[1] = 'x') then
if (Length(MeineOrdentlichSprechendeVariable) > 0) and (MeineOrdentlichSprechendeVariable[Low(MeineOrdentlichSprechendeVariable)] = 'x') then
Cool, wie schnelle es so ausssieht, daß man mehr und damit natürlich auch "besseren" Code geschrieben hatt. 8-)

cydo 24. Dez 2013 14:47

AW: VerySimpleXML: Problem unter iOS?
 
So. ich hab jetzt erstmal den bestehenden alten Code (noch nicht mit high/low) auf Google Code eingecheckt http://code.google.com/p/verysimplexml/, als Ziel würde ich auf eine 2.0 hinarbeiten, die Cross-Plattform für iOS/Android/MacOSX/Win32/Win64 unterstützt. Weiterhin sollte die Unit klein und überschaubar bleiben - soll jeder anpassen wie er mag. Für Erweiterungen wie Node.AsInteger/AsFloat/etc. würde ich eine zweite Unit vorschlagen, die per Helperclass einige Funktionen nachrüstet - gerade bei AsDateTime wirds spannend (sprich: lang) wie himitsu angemerkt hat. Daher würde dies einfach in eine Helperclass packen, da kann dann auch jeder einfacher was ändern.

Ihr seid wirklich herzlich gerne eingeladen, eure Änderungen am Code einzuchecken. Ich werde erst die nächsten Tage dazukommen, dann fange ich mit High/Low für die Strings an.

Insider2004 24. Dez 2013 14:58

AW: VerySimpleXML: Problem unter iOS?
 
Sehr schön. Ich würde allerdings erst Mal vorschlagen, dass man die Fehler beseitigt, bevor noch mehr Features eingebaut werden. Vielleicht auch mit Stabilisierungs- und Entwicklungs-Branch.

cydo 26. Dez 2013 10:03

AW: VerySimpleXML: Problem unter iOS?
 
Zitat:

Zitat von Insider2004 (Beitrag 1240945)
Sehr schön. Ich würde allerdings erst Mal vorschlagen, dass man die Fehler beseitigt, bevor noch mehr Features eingebaut werden. Vielleicht auch mit Stabilisierungs- und Entwicklungs-Branch.

Ja schon klar. Die Umstellung auf High/Low bei den Strings beseitigt ja den Fehler um den es in diesem Thread eigentlich geht *hust* *hust*. Und damit auch die vollständige Cross-Plattformfähigkeit herstellt (bisher nur Win/Mac).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 2 von 2     12   

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