[NEU] IniWrite_include

13/01/2009 - 12:31 von Hermann Hippen | Report spam
Moin Moin :-),

Dies ist eigentlich ein Include, das von denen genutzt werden kann, die
Scripte schreiben und nicht vom normalen User. Deshalb befindet sich das
Include auch normalerweise nur in meinem aktuellen Basis_Modul
(noch nicht im Forum zu haben - Karl-Heinz braucht mal 'ne Pause :) Am
Wochenende gibt es dafür ein Update das sich lohnt!)

Aber damit die Scriptproduzenten auf die, von diesem Script, in der
settings.ini gemachten Eintràge zurückgreifen können, sollte sich jeder
dieses Include installieren. Meine Scripte werden vom nàchsten Update an
genau dieses voraussetzen!

Grund dafür ist:

Ich habe festgestellt, das es mit den jetzt genutzten, relativen
Pfadangaben, selten aber immerhin, zu Fehlern kommt, der Pfad zum
Hauptverzeichniss also nicht immer auch auf das Programmverzeichniss von
Dialog gesetzt bleibt.

Um Abhilfe zu schaffen, also das bei Zugriffen auf Dateien auch
tatsàchlich der richtige Pfad verwendet wird, lass ich mir den beim
Programmstart in die 'settings.ini' schreiben, von wo ich ihn in den
Scripten bei Bedarf auslesen kann.

So ist bei der Verwendung von relative Pfadangaben in den Scripten dafür
gesorgt das die Pfade immer korrekt sind.

Ein Script nur für disen einzigen Einsatzzweck hàtte sicher einfacher
gestrickt sein können aber ich verwende diese, aus dem Basis_Modul
ausgelagerte und zur Include gemachten, Routine auch für andere Zwecke,
deshalb ist sie flexibel für Operationen mit INI Dateien ausgelegt.

Der Vorgang selbst ist relativ simpel:
Die mit {$I IniWrite_include} in OnStartUp eingebundene Include wird vor
allen anderen Aufrufen in diesem Programm mit:

IniWrite(Dateiname,Rubrik,Name des Eintrags, Inhalt des Eintrags);

also in diesem speziellen Fall so:

IniWrite('settings.ini','Programmpfade','Stammpfad',GetCurrentDir +
'\');

aufgerufen und macht dann folgendes:

- Die 'settings.ini' wird geladen

- Der Name des Eintrages wird gesucht, ist er schon vorhanden wird der
Inhalt des Eintrages aktualisiert - speichern - Scriptende.
Das aktualisieren beim Programmstart gewàhrleistet, das nach einem
Umzug mit dem Programmverzeichnis, auf zum Beispiel eine andere
Platte, der neue Pfad allen Scripten, automatisch sofort wieder zur
Verfügung steht.

- Wurde der Name nicht gefunden, wird nachgesehen ob die Rubrik
vorhanden ist wenn nicht wird sie angelegt und Name mit Inhalt
darunter geschrieben - speichern - Scriptende

- Wurde die Rubrik gefunden, nur der Name nicht, handelt es sich also um
einen neuen Eintrag unter der gleichen Rubrik, wird der Name der
Rubrik in der Datei gesucht und dann darunter der neue Eintrag aus
Name+Inhalt angelegt/eingetragen.

Mit diesem Verfahren ist bei Verwendung von relativen Pfadnamen,
Stabilitàt gewàhrleistet und auch bei Umzügen immer automatisch der
aktuelle Pfad pràsent.

Der Einsatz des Scripts muss nicht auf diesen Einzelfall beschrànkt
bleiben, es làsst sich sicher vielfàltig verwenden.

Das Gegenstück zu diesem Script ist die IniRead Routine, die nicht mit
TStringList(n) arbeitet sondern ein anderes,schnelleres Verfahren nutzt,
aber das ist für den 'normalen User' uninteressant das es ja nur in
Scripten verbaut wird um schnell Ini Eintràge auszulesen und sonst zu
nichts nutze ist ;)

Diese Script solltet ihr aber als Vorbereitung auf kommende Scripte
(kommen schnell als ihr denkt ;) ) schon jetzt einsetzen, denn wie
gesagt, kommende Scripte werden auf diese so gemachten Eintràge
zugreifen und ich denke mal auch DiDi's künftigen Updates oder
Neuerscheinungen werde dies tun, um Stabilitàt in die relative
Pfadnutzung zu bringen.

Wundert euch übrigens nicht: Da es für Linie1 und Linie2 gleichermassen
verwendet wird, habe ich mich überwunden dieses Include dem Linie1 Stil
anzupassen und sogar mit Kommentaren zu versehen - ob und inwieweit
diese sinnvoll, darüber làsst sich streiten (nur speziell auf dieses
Scriptchen bezogen - allgemein können Kommentare natürlich nur sinnvoll
sein)

Was vergessen?

Hmm, *grübel*

ACH JAA Das Script natürlich ;-)


8<--[ IniWrite_Include ]-->8
// FileName: IniWrite_Include - Stand 13.01.2009
//
// IniFileName = Name der Datei z.B. settings.ini
// IniTitel = Überschrift der Rubrik in der IniDatei
// IniName = Name des Eintrags in der Ini
// IniValue = Inhalt des Eintrags
//
// Wird die Überschrift nicht gefunden, wird sie neu angelegt
// und der IniName=IniValue darunter eingetragen.
//
// Wird IniName nicht gefunden, aber die Überschrift, wird
// IniName=IniValue darunter neu angelegt.
//
// Wird der IniName in der Datei gefunden, wird IniValue bearbeitet.
//-
Function IniWrite(IniFileName,IniTitel,IniName,IniValue:String):Boolean;
Var I : Integer;
IniFileContent : TStringList;
Pair : String;
Begin
Result := False; // Hört sich schlimm an,es wurde aber ja noch nichts gemacht.
IniFileContent := TStringList.Create; // Wir brauchen erst mal Platz für die Daten der Datei
If Pos(' ',IniValue) > 0 Then // Leerzeichen im Eintrag?
IniValue := '"' + IniValue + '"'; // dann packen wir den mal in '"'
IniTitel := '[' + IniTitel + ']'; // Den Titel passen wir dem Standard an [Rubrik]
Pair := IniName + '=' + IniValue; // Hier wàchst zusammen, was zusammen gehört :)
With IniFileContent Do
Begin
Try
LoadFromFile (IniFileName); // Dann holen wir uns erst mal die gewünschte Datei..
If IndexOfName(IniName) > -1 // Namen gefunden?
Then Values[IniName]:= IniValue // Dann nur Eintrag bearbeiten
Else If Pos(IniTitel,Text) = 0 // Name nicht gefunden und die Rubrik auch nicht :(
Then Insert(0,IniTitel + #13#10 + Pair) // Dann legen wir besser beides neu an
// und schreiben den Eintrag gleich dazu.:)
Else Begin // Rubrik doch vorhanden?
For I := 0 To Count-1 Do // Dann schauen wir mal wo sie genau ist...
Begin
If Strings[i] = IniTitel Then // und schreiben den neuen Eintrag
Insert(i + 1, Pair); // unter die Rubrik.
Break; // schnell wieder raus hier
// der Rest geht uns nicht's an :)
End;
End; // Hmm, END? Da war doch noch was...?
SaveToFile(IniFileName); // Ach ja! Speichern nicht vergessen,
// sonst wàr ja alles für die Katz gewesen :)
Result := True; // Tja, das haben wir fein gemacht :)
Finally
Free; // Eine nette Funktion ràumt natürlich den Speicher wieder auf
End;
End;
End; // Was? Das war's schon? :( Na ja, bis zum nàchsten Mal.
8<>8

Im OnStartup sieht das Ganze dann ungefàhr so aus:

| Program OnStartup;
| Uses Forms, Extctrls, TextFile;
| {$I IniWrite_include}
| Procedure OnStartup;
| Begin
| IniWrite('settings.ini','Programmpfade','Stammpfad',GetCurrentDir + '\');
| // Hier folgen weitere Aufrufe...
| End;
| begin
| End.

Cu,
Hermann Hippen.
ž' š°º€ø?žžžžž?ø€º°š 'ž
ø€º° '<http://4ds.siteboard.eu>' °º€ø
'ž '40tude-Dialog Scriptwerkstatt' ž'
ø€º°' ž ž ø€º°ššššššš°º€øšž ž '°º€ø
 

Lesen sie die antworten

#1 Hermann Hippen
13/01/2009 - 12:55 | Warnen spam
Hermann »Ingrid« Hippen schrieb in d.c.s.4-d:

[IniWrite_include]

Es sei noch angemerkt, das dieses Include NICHT als Ersatz für die
Einstellungen in der Verknüpfung:

<http://pic.leech.it/i/bda54/50140527dialog.jpg>

zum Aufruf von Dialog dient, sondern der stabilisierenden Ergànzung! Die
Einstellungen in der Verknüpfung bleiben bei der Verwendung von
relativen Pfadnamen ein Muss.

Noch ein Hinweis: Wer sich wundert, das nach dem Compilieren von
OnStartUp und einem Start des Programms aus dem Editor heraus, keine
Eintràge in der 'settings.ini' zu finden sind, sollte einfach mal den
Dialog beenden und neu starten - dann sind die Eintràge auch da, denn
OnStartup làuft tatsàchlich nur beim Dialog-Programmstart.

Cu,
Hermann Hippen.
ž' š°º€ø?žžžžž?ø€º°š 'ž
ø€º° '<http://4ds.siteboard.eu>' °º€ø
'ž '40tude-Dialog Scriptwerkstatt' ž'
ø€º°' ž ž ø€º°ššššššš°º€øšž ž '°º€ø

Ähnliche fragen