dc_iniread auswerten

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

dc_iniread auswerten

Beitrag von Manfred »

Hi,
wenn ich mit dc_iniread einen Wert suche und auslese, dann bekomme ich in einen leeren String zurück wenn kein Wert gefunden wurde. Aber auch, wenn kein Wert vergeben wurde. Kann man nicht irgendwie ermitteln, ob der Wert nur leer war, oder gar nicht als Parameter vorhanden in der Datei?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Herbert »

Hallo Manfred
Beim Lesen von .ini-Files gilt immer, dass du einen Defaultwert mitgibst, falls der Wert nicht gefunden wird.
Das sollte doch bei dc_iniread auch so sein oder? Sonst müsstest dein eigenes Ini-kreieren.
Ich hatte da mal eine eigene Klasse für Xbase.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: dc_iniread auswerten

Beitrag von Manfred »

Hi herbert,
bei der Funktion gebe ich mit welche Gruppe und welcher Parameter. Dann gibt die Funktion den Wert zurück der drin steht. Wenn nichts steht oder der Wert nicht vorhanden ist, dann gibt es immer 0 zurück oder leer.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack »

Wozu ist das wichtig, ob er nicht vorhanden ist oder leer ?
In beiden Fällen hast du keinen Wert :D
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: dc_iniread auswerten

Beitrag von Manfred »

richtig, nur wenn der Wert leer ist, dann muß ich nichts zurückschreiben. Wenn der Wert aber nicht eingetragen ist, dann muß er angelegt werden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack »

Aber es würde ja nicht stören, wenn du immer den Wert, egal ob vorhanden oder nicht, zurückschreibst ?
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: dc_iniread auswerten

Beitrag von Manfred »

Hi Wolfgang,
es geht um ein recht blödes Problem. Am Anfang wird die Konfigdatei ausgelesen und im Zweifelsfall ergänzt. Jede WS hat eine zusätzlich eigene für sich gültige INI Datei, für abweichende Werte der Grundkonfiguration. Jetzt hatte ich folgendes Problem: Der User startet sein Programm und es erscheint nicht binnen 0,00001 Sekunde am Bildschirm. Was macht der User? Er klickt und klickt und klickt ....... Und jedesmal wird im Hintergrund das Programm aufgerufen. Endergebnis irgendwie wurde die INI Datei immer größer und größer, weil jeder Programmaufruf was reingeschrieben hat. Teilweise war die INI Datei statt 1200KB 2MB groß. Ob das jetzt wirklich mit dem unnötigen Schreiben zusammenhängt, war mir nicht mögloich zu ermitteln. Auf jeden Fall stand das System still. OK, jetzt habe ich das mit Mutex wohl in den Griff bekommen, das die Programme nur noch 1x aufgerufen werden können und das bevor die INI Dateien ausgelesen werden. Ich weiß aber nicht ob das die zukunftsweise Lösung ist. Das wird die Praxis zeigen. Leider ruft Roger mehrere Funktionen nacheinander auf um die Ini Dateien zu bearbeiten, deshalb wird es wohl auch schwer möglich sein, so eine Textdatei exklusiv versuchen zu öffenen um dann eben zu warten, oder eine Meldung am Bildschirm auszuwerfen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Herbert »

Manfred hat geschrieben: Mi, 09. Okt 2019 17:43 Hi herbert,
bei der Funktion gebe ich mit welche Gruppe und welcher Parameter. Dann gibt die Funktion den Wert zurück der drin steht. Wenn nichts steht oder der Wert nicht vorhanden ist, dann gibt es immer 0 zurück oder leer.
Ja, das habe ich verstanden. Aber warum gibst du keinen Defaultwert mit, wie das bei normalen Iniread-Funktionen der Fall ist? Windows gibt das sogar vor mit GetPrivateProfileString.
Falls du keinen Defaultwert mitgeben kannst, ist die Funktion nicht fertig gedacht und müsstest auf andere Art das .INI-File lesen.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: dc_iniread auswerten

Beitrag von Manfred »

weil der Defaultwert in der Hauptini steht, der auch einmalig gesetzt wird beim Erzeugen. Die WS INI dient nur der Überschreibung, falls der Wert anders ist. So kann man direkt sehen, welcher Wert im Zweifelsfalle wie abweicht. Außerdem ist das jetzt hier nur ein Beispiel und soll nicht dazu dienen zu philosophieren warum ich es nicht anders mache.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
mache dir doch eine GetSet-Funktion, solange die Ini-Datei gelesen/geschrieben wird.

Code: Alles auswählen

static function IniReadIsRunning(lSet)
static lIsRunning:=.F.
if pcount()>0
   lIsRunning:=lSet
endif
return lIsRunning
In deiner LeseRoutine dann den als erstes den Aufruf

Code: Alles auswählen

if IniReadIsRunning()
   ** Meldung läuft schon...
   return
endif
IniReadIsRunning(.T.)
..Ini-Datei Lesen
IniReadIsRunning(.F.)
return
Damit kann dann die Ini-Datei nur einmal gelesen/geschrieben/ergänzt werden.
Viele Grüße
Wolfgang
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: dc_iniread auswerten

Beitrag von Tom »

Das hilft nur innerhalb der Instanz, Wolfgang.
Herzlich,
Tom
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: dc_iniread auswerten

Beitrag von ramses »

Verwende für die Parameter eine Datenbank oder baue dir deine eigene Funktion und das Problem geht weg.

dc_readini() ist nicht für Netzwerk/Multiuser/Mehrfachzugriff geeignet. Wie du in den ersten Zeilen des Sourcecodes leicht feststellen und selbst erlebt hast. Deine Lösung mit Mutex ist keine Lösung des Problems sondern nur der verzweifelte Versuch die Situation des Mehrfachzugriff zu verhindern ..... zudem mit dem Nachteil dass auch wenn du das willst die App nicht ein 2. Mal öffnen kannst.
Valar Morghulis

Gruss Carlo
Antworten