Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "Abstract error" mit TJSONIterator (https://www.delphipraxis.net/213955-abstract-error-mit-tjsoniterator.html)

freejay 27. Okt 2023 13:49

"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:
  FStringReader := TStringReader.Create('Irgend ein JSON Text');
  FJsonTextReader := TJsonTextReader.Create(FStringReader);
  FIterator := TJSONIterator.Create(FJsonTextReader);
  FIterator.Next;
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:

Delphi-Quellcode:
  myStreamReader := TMyStreamReader.Create('IrgendeineDateiIn.JSON');
  FJsonTextReader := TJsonTextReader.Create(myStreamReader);
  FIterator := TJSONIterator.Create(FJsonTextReader);
  FIterator.Next;
TMyStreamReader ist dabei ein von TTextReader abgeleites Objekt, genau wie vorher TStringReader.

Jetzt aber bekomme ich in der Zeile

Delphi-Quellcode:
FIterator.Next
einen "Abstract error".

Hat jemand eine Idee, was ich hier übersehe/falsch mache?

Danke & Gruß

Freejay

Olli73 27. Okt 2023 14:28

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".

Der schöne Günther 27. Okt 2023 15:05

AW: "Abstract error" mit TJSONIterator
 
Wozu brauchst du deinen
Delphi-Quellcode:
TMyStreamReader
? Ist dir
Delphi-Quellcode:
System.Classes.TStreamReader
nicht gut genug?

itblumi 27. Okt 2023 15:12

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.

mytbo 27. Okt 2023 15:45

AW: "Abstract error" mit TJSONIterator
 
Zitat:

Zitat von freejay (Beitrag 1528667)
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.

Was sind bei dir große Dateien? Müssen es die Delphi Bordmittel sein? Der JSON-Viewer aus diesem Artikel benutzt einen universellen Ansatz zum Laden.

Bis bald...
Thomas

Uwe Raabe 27. Okt 2023 22:50

AW: "Abstract error" mit TJSONIterator
 
Zitat:

Zitat von Olli73 (Beitrag 1528668)
Edit: Ich sehe gerade der Fehler ist in "FIterator.Next". Dann ist dort halt irgendwas "abstract".

Eher nicht, aber in dem Next wird indirekt eine nicht überschriebene Methode von TTextReader aufgerufen.

Union 30. Okt 2023 11:45

AW: "Abstract error" mit TJSONIterator
 
Wieso rufst Du überhaupt Next() auf? Das Read() macht das doch eigentlich implizit.

paule32.jk 30. Okt 2023 13:53

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.

Union 30. Okt 2023 14:04

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.

paule32.jk 30. Okt 2023 14:22

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 15:00 Uhr.
Seite 1 von 2  1 2      

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