Jsonfile - DataObject - Jsonfile (gelöst)

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Jsonfile - DataObject - Jsonfile (gelöst)

Beitrag von Peter Schweizer »

Hallo Wissende,
hab da einen Fehler den ich mir nicht erklären kann. ( xBase 2.0, Build 1068,OEM-Zeichensatz)
Ich mache eine kleine Testfkt um einen Json.txt Datei einzulesen, in ein DatoObjekt umzuwandeln und anschließend wieder auszugeben.
Beim erneuten einlesen der soeben erstellten neuen Json-Datei und Umwandlung in ein DataObject kommt ein Crash !

Code: Alles auswählen

FUNCTION Test()
	LOCAL cJsonIn1,cJsonIn2,oData,cJsonOut, oDataNeu
	
	LOCAL cFileIn := 'tse_info.txt'
	LOCAL cFileOut:='tse_info_out.txt'
	*-------------------------------------------------
	* Json String auf bestehender Datei einlesen
   	cJsonin1 := FileRead( cFileIn )  
   	* DataObject erstellen
	oData := Json2Var(cJsonin1)  
	
	* DataObject in String konvertieren       
	cJsonOut := Var2Json(oData)
	* neue Datei erstellen
	StrFile(cJsonOut, cFileOut, TRUE ) 
	
	* Json String auf bestehender Datei einlesen
   	cJsonIn2 := FileRead( cFileOut )  
   	* DataObject erstellen
	oDataNeu := Json2Var(cJsonIn2)   --> oError:despription c: "[Line:1:1] Generic syntax error"	
	
RETURN (NIL

FUNCTION FileRead( cFileName )
	LOCAL nTop, nBottom, nHandle, cString
	nHandle := Fopen(cFileName)
	IF nHandle <= 0
	   err_fenster('File ' + cFileName + ' nicht zu öffnen')
	   RETURN ''
	ENDIF
	nBottom := FSeek( nHandle, 0 , FS_END )
	nTop := FSeek( nHandle, 0 , FS_SET )
	cString := Space(nBottom-nTop-1)
	FRead( nHandle, @cString, nBottom - nTop - 1 )
	FClose(nHandle)
RETURN cString
Hat jemand eine Idee was da schief laufen könnte ?
Gruß Peter
Zuletzt geändert von Peter Schweizer am Mi, 22. Apr 2020 9:35, insgesamt 1-mal geändert.
Gruss Peter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Jsonfile - DataObject - Jsonfile

Beitrag von georg »

Hallo, Peter -


irgendwie habe ich das Gefühl, Dir fehlt ein Byte in der Funktion FileRead(). Verwende doch mal statt den fSeek()s fSize(nHandle), um die Grösse zu ermitteln.

Bei einer Datei von 1.000 Byte liefert nBottom 0, nTop liefert 1.000, und Deine Rechnung ergibt nach meiner Einschätzung 1.000 - 0 - 1 = 999.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Jsonfile - DataObject - Jsonfile

Beitrag von ramses »

Hallo Peter

deine Zeile

Code: Alles auswählen

nBottom := FSeek( nHandle, 0 , FS_END )
liefert schon die Gesamtgrösse. (Der Pointer steht nach dem öffnen der Datei am Dateianfang)
Mit deiner Variante liest du wie Georg schreibt 1 Byte zu wenig.

Nach dieser Anpassung funtioniert dein Code mit einer "wohlgeformten" Json Datei.

Neben den wohlgeformten Json Dateien gibt jedoch auch Formate von JSON Dateien die mit den JSON Funktionen von Xbase++ nicht bearbeitet oder eingelesen werden können.
Valar Morghulis

Gruss Carlo
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Jsonfile - DataObject - Jsonfile

Beitrag von Peter Schweizer »

Vielen Dank für die Antworten, das war die Lösung !
(Da hätte ich noch eine weile suchen können.)
Dankesgrüße
Peter
Gruss Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Jsonfile - DataObject - Jsonfile (gelöst)

Beitrag von brandelh »

Bei den ganzen File Funktionen frage ich mich auch immer ob das erste Zeichen als 0 (offset) oder 1 (das Erste Zeichen) im Parameter anzugeben ist, genau das steht nämlich nicht in der Hilfe drinn :(
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Jsonfile - DataObject - Jsonfile (gelöst)

Beitrag von Tom »

Ich lese immer komplett ein und extrahiere intern, ganz egal was.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Jsonfile - DataObject - Jsonfile (gelöst)

Beitrag von brandelh »

so mache ich das auch, aber letzt wollte ich was überschreiben und da dachte ich lies in der Hilfe nach ;-) (Pech gehabt)
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Jsonfile - DataObject - Jsonfile (gelöst)

Beitrag von ramses »

Hallo Hubert

ein Offset beschreibt normalerweise wieviele Bytes es von der aktuellen Adresse zur gewünschten Zieladresse sind.
z.B: FSeek( nHandle, 0 , FS_SET ) setzt du also den Pointer auf Dateianfang + 0 also auf das 1. Byte der Datei.
Eigentlich ganz einfach ....
Valar Morghulis

Gruss Carlo
Antworten