dc_iniread auswerten

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18915
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

dc_iniread auswerten

Beitrag von Manfred » Mi, 09. Okt 2019 13:34

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1940
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Herbert » Mi, 09. Okt 2019 17:37

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: 18915
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: dc_iniread auswerten

Beitrag von Manfred » 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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2551
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack » Mi, 09. Okt 2019 18:43

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: 18915
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: dc_iniread auswerten

Beitrag von Manfred » Do, 10. Okt 2019 7:12

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2551
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2019 8:17

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: 18915
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: dc_iniread auswerten

Beitrag von Manfred » Do, 10. Okt 2019 8:28

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1940
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Herbert » Do, 10. Okt 2019 8:31

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: 18915
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: dc_iniread auswerten

Beitrag von Manfred » Do, 10. Okt 2019 8:40

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2551
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Wolfgang Ciriack » Do, 10. Okt 2019 19:06

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: 7725
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: dc_iniread auswerten

Beitrag von Tom » Do, 10. Okt 2019 21:50

Das hilft nur innerhalb der Instanz, Wolfgang.
Herzlich,
Tom

ramses
Programmier-Gott
Programmier-Gott
Beiträge: 1471
Registriert: Mi, 28. Jul 2010 17:16

Re: dc_iniread auswerten

Beitrag von ramses » Fr, 11. Okt 2019 5:28

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