![]() |
Delphi-Version: 5
Zeichenkette zerlegen...
Hallo ihr Lieben,
ich habe eine Webseite die einen Rückgabewert aus einer Ajax Abfrage wiedergibt, die wie folgt ausschaut!
Code:
Wie könnte ich das ab besten zuverlässig sauber in ein Array oder in was auch immer zerlegen, damit ich auf die einzelnen Werte Zugriff bekomme?!
{
"ResultData": [ {"PostId":"421386","data":{"PostId":"421386","title":"Mein Title"}}, {"PostId":"421386","data":{"PostId":"421386","title":"Mein Title"}}, {"PostId":"421386","data":{"PostId":"421386","title":"Mein Title"}}, {"PostId":"421386","data":{"PostId":"421386","title":"Mein Title"}} ] } Danke Euch für Eure Tipps.... |
AW: Zeichenkette zerlegen...
Als Container einfach ein solches Array:
Delphi-Quellcode:
Und parsen kannst du die Rückgabe eigentlich recht einfach mit Pos(), Copy(), Delete() und einer schönen Schleife :)
type
MyRecord = record Id: Integer; Title: String; var MyArray = array of MyRecord; |
AW: Zeichenkette zerlegen...
Das Format was du da hast nennt sich
![]() |
AW: Zeichenkette zerlegen...
ahhh hey super danke - wusste ich nicht das es dafür sogar einen namen gibt!
THANKS! Werde nun sicher weiterkommen - :thumb: |
AW: Zeichenkette zerlegen...
konkret kann ich da
![]() |
AW: Zeichenkette zerlegen...
In "neueren" Delphis wäre eine JSON-Implementation schon vorhanden.
Ich weiß nur nicht seit wann es das gibt, da sowas in der OH nie erwähnt wird. :wall: Aber im D5 des TE wird's das vernutlich noch nicht geben. :oops: |
AW: Zeichenkette zerlegen...
Zitat:
Neiiin, niemals. Mein Parser hat eine Zutat, die der von Borland wohl nicht hat: Liebe :P |
AW: Zeichenkette zerlegen...
nicht nur das es das dort nicht gibt ich kann keine der 3 JSON Parser nutzen da die alle für Ü D5 gemacht sind!
"superobjectv" habe ich versucht, da fehlen mir Units (msxml zB für das DEMO Projekt) und mein D5 kennt auch nicht:VShortInt und weiter bin ich beim Compelieren nicht gekommen um zu wissen was NOCH fehlt :( "lkJSON" ist total murks weil kein UTF8String, DupeString, keine Unit StrUtils - und wer weiss was noch fehlt Tja |
AW: Zeichenkette zerlegen...
Zitat:
Die Speicherverwaltung, die Verwendung und andere Aspekte der Emba-Version sind .... sagen wir mal ... nja, die sind etwas krank gewöhnungsbedürftig. [add] msxml sollte vorhanden möglich sein, da dieses nur eine Header-Unit ist und die Funktionalität im Windows steckt. Das gibt es ferige Units runterzuladen und es gibt Beschreibungen, wir du diese unit selber importierst/erstellst. (sollte sich alles in Google oder der Forensuche finden lassen) Und fast Alles, was ANSI kann, das kann man auch für UTF8 misbrauchen. |
AW: Zeichenkette zerlegen...
Ok msxml ist nun vorhanden! :) danke
Aber das war ja nur das Problem bei der DEMO -- aber der parser selbst lässt sich aufgrund zahlreicher fehlender Dinge nicht compilieren... |
AW: Zeichenkette zerlegen...
@delphinia: über Torry habe ich
![]() |
AW: Zeichenkette zerlegen...
@DeddyH
Danke aber genau die habe ich hier auch und versuchte sie! da scheitert mein D5 Std bei dieser geschichte " result := variants.Null;" Zitat:
Mal abgesehen von all den "{$IF" im Code die ich entfernen muss weil sich der Compiler auch daran sich nicht behaupten kann :( |
AW: Zeichenkette zerlegen...
Nja, für DupeString gibt es im Forum irgendwo ein paar Ersatzfunktionen und auch sonst kann man Vieles ersetzen/nachbauen.
Im Notfall können wir ja bei einigen Funktionen aushelfen. ![]() Bei soeinem "alten" Delphi wird man leider damit leben ,üssen, daß man an vielen Stellen selber Hand anlegen muß. PS: eine eMail an germny.info@embarcadero.de und darin ganz lieb nach einer Lizenz für Turbo Delphi fragen Variants ist eine Unit, welche es doch im D5 schon geben sollte? :gruebel: |
AW: Zeichenkette zerlegen...
Und {$IFDEF XXX} sollte IIRC auch Delphi 5 bereits kennen.
|
AW: Zeichenkette zerlegen...
Zitat:
Delphi-Quellcode:
ja, aber nicht die ConditionalExpressions ala
{$IFDEF
Delphi-Quellcode:
(die gab es, blaub ich, erst seit D6 oder D7)
{$IF
|
AW: Zeichenkette zerlegen...
Habe Turbo Delphi, Habe die damals alle kostenlosen D Versionen...
Aber ich hänge an D5 da ich dort ALLE komponenten habe die ich so täglich brauche - mal davon ab das bei all den D-Versionen (kostenlosen) ja keine Komponenten eingebunden werden können wenn ich das Recht in Erinnerung habe! Und der letzte Punkt ist diese neuen Oberflächen alles in einem Fenster -- nicht so schln frei wie in D5... EGAL Ich weiss das ich nicht viele Ansprüche stellen kann und vieles selbst machen muss! Doch wenn man nicht mal weiss welche Funktion sicher hinter DupeString verbirgt wird es schwer... und einfach irgendwo kopieren darf man auch nicht... Daher versuch ich halt mir das möflichste! Habe ja auch vieles geschaftt UTF8String habe ich in den JCLs gefunden, MSXML habe ich auf gefunden... Aber bei sowas wie "result := variants.Null;"
Code:
Scheitere ich da ich damit nichts anfangen kann da ich nicht mal weiss was "variants" sein soll .... Ich kenne das als Unit bei neueren D-Versionen!
[Fehler] uLkJSON.pas(478): Undefinierter Bezeichner: 'variants'
|
AW: Zeichenkette zerlegen...
Wenn du in der Projektoptionen in Verzeichnisse/Bedingungen die Unit-Aliase um
Variants=System erweiterst, dann sollte alles sauber durchlaufen. :angel: |
AW: Zeichenkette zerlegen...
Gut, Anfangs hat mich das alles in einem Fenster auch gestört ... jetzt hab ich mich dran gewöhnt. :angle2:
OK, wenn ich jetzt erwähne, daß man in ganz neuen Delphi-Versionen wieder alles in Einzelfenster zerlegen kann, dann hilft es dir nicht wirklich was. :lol: OK, also ![]()
Delphi-Quellcode:
liefert also
DupeString('abc', 5)
Delphi-Quellcode:
zurück.
'abcabcabcabcabc'
|
AW: Zeichenkette zerlegen...
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Zeichenkette zerlegen...
Mh komisch ... und ich sehne mich nach GIMP 2.8, damit endlich alles in einem Fenster ist. Diese Einzelfenster gehen einem auf die Nerven, besonders wenn sie aus dem Bildschirmbereich ragen :roll:
Ups, Off-Topic. Bin weg ^^ |
AW: Zeichenkette zerlegen...
In dem Screenshot sehe ich etwas von Klassenmethoden, also dürfte die Delphi 7-Angabe auf Torry wohl auch falsch sein. Zumindest den Variants-Fehler bekäme man wohl weg, wenn man im Code den Unit-Namen austauscht, sofern das mit dem Alias tatsächlich nicht funktioniert.
|
AW: Zeichenkette zerlegen...
habe VARIANTS gegen SYSTEM getauscht - geht (!?)
Aber nun ist wieder etwas was nicht vorhanden "VarToWideStr" das habe ich nicht einmal hier im Forum gefunden! |
AW: Zeichenkette zerlegen...
Das macht aus einem Variant einen WideString.
Sollte sich durch eine einfache Zuweisung ersetzen lassen.
Delphi-Quellcode:
(jenachdem wie der Aufruf genau aussieht, da ich die Codestelle jetzt nicht direkt kenn)
S := V;
|
AW: Zeichenkette zerlegen...
Delphi-Quellcode:
das der Code
procedure TlkJSONstring.SetValue(const AValue: Variant);
begin FValue := VarToWideStr(AValue); end; |
AW: Zeichenkette zerlegen...
Aus der Variants.pas von Delphi 2007 (das Zitat ist hoffentlich erlaubt):
Zitat:
|
AW: Zeichenkette zerlegen...
Wenn es VarToWideStr nicht gibt, dann wird vermutlich auch VarToWideStrDef nicht vorhanden sein.
Eventuell liegen die im D5 auch nur woanders.
Delphi-Quellcode:
procedure TlkJSONstring.SetValue(const AValue: Variant);
begin FValue := AValue; // Delphi sollte das auch automatisch umwandeln können end; |
AW: Zeichenkette zerlegen...
Offtopic: sehe gerade im Memberbereich von "embarcadero.com" das ich sogar 2 Lizenzen für "Turbo Delphi 2006 Explorer Edition" - tzzz *confus*
öhm ja also habe nun auch das von Dir ersetzt...
Delphi-Quellcode:
aber es wird ein Fass ohne Bode! wir sind gerade bei Zeile 737 von fast 2500 und schon das nächste...
procedure TlkJSONstring.SetValue(const AValue: Variant);
begin FValue := AValue; end;
Code:
was mein D5 nicht kennt!
VarIsNumeric
Habe mal nun so durch gescrollt... das wird auch noch weiter so gehen "strSpecialChars" - dann versuch ich mein Glück mal mit anderen Parsern... :( DANKE EUCH SOWEIT...:thumb: |
AW: Zeichenkette zerlegen...
VarIsNumeric...
Ja, wie der Name schon sagt ... einfach prüfen, ob im Variant ein nummerischer Wert drin steckt :zwinker:
Delphi-Quellcode:
[edit]
Result := TryStrToFloat(String(AValue));
// aber TryStrToFloat kennt dein Delphi wohl nicht var E: Integer; F: Single; Val(String(AValue), F, E); Result := E = 0; halt nee, String() könnte auch noch eine Exception auslösen
Delphi-Quellcode:
try
StrToFloat(String(AValue)); Result := True; except Result := False; end; |
AW: Zeichenkette zerlegen...
ich habe mit mit dem parser "uJSON" beschäftigt musste zwar auch da eine oder andere.... Aber habe es im Inet gefunden was fehlte bzw verändert und er scheint zu laufen, da ich es nur zum Lesen brauche hoffe och das er mich nicht im Stich lässt!
Noch einmal DANKE an Euch alle die hier echt super geholfen haben! |
AW: Zeichenkette zerlegen...
Die Frage ist, ob es nicht anders einfacher geht, weil eigentlich brauchst Du doch keinen kompletten Parser.
Wenn Du irgend eine regex Bibliothek findest, die unter Delphi5 läuft, dann sollte es kein grosses Problem sein, dieses eine spezielle Rückgabeformat, das Du hast, mittels regex in ihre Bestandteile zu zerlegen. Ist sicher einfacher, als ein umfangreiches Tool an D5 anzupassen, das zwar viel mehr könnte, aber von dem Du eigentlich nicht viel brauchst. edit: Der Tipp kam offenbar zu spät - vielleicht umso besser :) |
AW: Zeichenkette zerlegen...
OffTopic:
Zitat:
|
AW: Zeichenkette zerlegen...
Tatsächlich? Ich dachte immer, die wären erst mit Delphi 2006 eingeführt worden.
|
AW: Zeichenkette zerlegen...
Klassen-Methoden gab es da schon. (in Delphi 5 oder 6 fehlten die aber noch)
Klassen-Variablen und eingebettete Typen fehlten aber. Seit 2006 gibt es Record-Methoden. und wann der
Delphi-Quellcode:
eingeführt wurde, weiß ich jetzt nicht.
class consstructor
Ich sag's ja schon lange ... in die OH gehört mit rein, seit wann es was gibt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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