![]() |
"Abstract error" mit TJSONIterator
Hallo zusammen,
ich benutze TJsonIterator zusammen mit TJsonTextReader um Daten aus JSON-Dateien zu extrahieren. Wenn ich dabei einen String übergebe, klappt das auch problemlos:
Delphi-Quellcode:
Da ich aber mit sehr großen Dateien arbeiten muss, würde ich gerne die Dateien direkt lesen und nicht erst im Speicher in einen String packen. Also will ich das so machen:
FStringReader := TStringReader.Create('Irgend ein JSON Text');
FJsonTextReader := TJsonTextReader.Create(FStringReader); FIterator := TJSONIterator.Create(FJsonTextReader); FIterator.Next;
Delphi-Quellcode:
TMyStreamReader ist dabei ein von TTextReader abgeleites Objekt, genau wie vorher TStringReader.
myStreamReader := TMyStreamReader.Create('IrgendeineDateiIn.JSON');
FJsonTextReader := TJsonTextReader.Create(myStreamReader); FIterator := TJSONIterator.Create(FJsonTextReader); FIterator.Next; Jetzt aber bekomme ich in der Zeile
Delphi-Quellcode:
einen "Abstract error".
FIterator.Next
Hat jemand eine Idee, was ich hier übersehe/falsch mache? Danke & Gruß Freejay |
AW: "Abstract error" mit TJSONIterator
Ich nehme an, die Methode "Next" ist in "TTextReader" als "abstract" deklariert und du überschreibst sie nicht in "TMyStreamReader ".
Edit: Ich sehe gerade der Fehler ist in "FIterator.Next". Dann ist dort halt irgendwas "abstract". |
AW: "Abstract error" mit TJSONIterator
Wozu brauchst du deinen
Delphi-Quellcode:
? Ist dir
TMyStreamReader
Delphi-Quellcode:
nicht gut genug?
System.Classes.TStreamReader
|
AW: "Abstract error" mit TJSONIterator
Schau mal deine Funktions Deklaration durch, du hast bestimmt ein override Statement vergessen bei der abgeleiteten Klasse und du musst natürlich alle abstrakten Methoden auch überschreiben.
|
AW: "Abstract error" mit TJSONIterator
Zitat:
![]() Bis bald... Thomas |
AW: "Abstract error" mit TJSONIterator
Zitat:
|
AW: "Abstract error" mit TJSONIterator
Wieso rufst Du überhaupt Next() auf? Das Read() macht das doch eigentlich implizit.
|
AW: "Abstract error" mit TJSONIterator
Abstract hin oder her,
ob nun Json oder TextReader oder anders dingends. In der Signatur kann man doch vom OP lesen, das er MySQL kennt. warum also nicht auf schon existierende Tools zurückgreifen, die man unter der Console anwenden kann ? Man schreibt sich ein kleienes Script, und schaut, wie man die Daten in den MySQL Server bekommt. Wenn man dann nach 10, 20 Datensätze das gewünschte Ergebnis hat, dann kann man ja in "Testing-Productive-Modus" schalten, und die Daten erstmal aufsplitten, bevor man diese lesen wird. wenn auch das klappt, kann man doch die Datenbank prüfen, und Stichproben auslesen, ob die Daten richtigerweise übernommen wurden. Ich verwende für sowas gerne MSYS2 oder eine dieser MinGW Shells 32/64-bit. Da sind zwar nicht alle Tools vorhanden, wie man diese wohl unter *nix her kennt, aber es wird eine breite Palette angeboten. |
AW: "Abstract error" mit TJSONIterator
Hervorragende Lösung. Wenn man ein proof-of-concept haben will. Ich gehe immer davon aus, dass die Anwendungen auch auf (vielen) Kundenmaschinen laufen sollen. Die dann alle mit diversen GNU Tools, MySQL etc. konfiguriert werden müssen. Allerdings hatte der TE es nicht mitgeteilt, wie die Anwendung zum Einsatz kommen soll.
Er hat allerdings einen Titel vergeben. Der lässt darauf schließen, dass er einen "abstract error" beim gewählten Ansatz erhält. Die Frage zu ignorieren führt ihn nicht zum Ziel. |
AW: "Abstract error" mit TJSONIterator
schon richtig.
Aber lieber Tipps geben, wie man es anders, evtl. besser machen, ist doch viel hilfreicher ? klar, bei den GNU Tools kann man sich verzetteln. Aber auf einen Kundenrechner sind Kundenprogramme, die der Entwickler mittels Installprogramm aufspielt, damit das fachkundige Personal damit arbeiten kann. Aber auf einen Entwickler-Rechner gehören neben Delphi, auch weitere Tools - und da ist es eigentlich egal was oder woher die kommen. Ich habe halt so eine Affinität zu GNU, weil diese Tools a) kostenlos unb b) hilfreich sein können. Ich kenne das doch auch aus meiner Programmier-Anfangszeit: Alles in ein Programm packen, und solange drann basteln, bis das dann alles stimmt. Aber das ist nicht produktiv. Und der Hint mit den GNU-Tools auf Kundenrechner - naja, hust... ... da würde ich auch abraten. Aber man kann ja Automatisierte Programme schreiben, die dann als Service laufen, wo der USER vielleicht nicht gleich was mitbekommt. Und eine Datenbank auf den Kundenrechner - ich weiß nicht. Das war damals, vor 40 Jahren mal so. Heute ist das eher "nicht" mehr zeitgemäß und fehlernafällig. Das solltet IHR Den Fragenden mitteilen, bzw. erfragen. Es ist ja alles schön und gut, das IHR GUT programmieren könnt. Aber manchmal sind es eben die kleinen Tricks, die das Leben eines kleinen Datenknechtes zu einen bunten Tag formen. und nochmals was zu kostenlos oder umsonst: - kostenlos ist nichts, auch der Tot kostet das Leben - umsonst ist auch nichts, weil, man lernt ja immer dazu. Aber das man dann umsonst und kostenlos zusammen würfelt und dann die Mitnahmegesellschaft formt, ist mir aber auch zuwieder - da kann schonmal ein kleiner Donut reichen :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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-2025 by Thomas Breitkreuz