Deutsch
Quelltexte/ Codesnippets

Deleteinisection V100 Xprofan

 

Michael
Wodrich
Da es ja wohl viele brauchen habe ich das Sektionslöschen mal in XProfan v10.0 geschrieben.
Wer es noch nicht austesten kann -- EXE-Datei mit diesem Code ist beigefügt.
KompilierenMarkierenSeparieren
!
eine ganze Sektion aus einer INI-Datei löschen
XProfan v 10.0  !!!
Autor: Michael Wodrich

Proc ErsetzeMetazeichen

    alle Metazeichen der regulären Ausdrücke werden hier "entschärft"
    Parameters s$
    Declare Metazeichen$,MLen%
    Vorsicht!!! Die Tilde muß als *erstes* Zeichen "entschärft" werden!!!
    Metazeichen$ = "~$^*+?|(){}[]."
    MLen% = Len(Metazeichen$)

    WhileLoop MLen%

        wird ein Metazeichen im String gefunden, dann wird das Escapezeichen "~" vorangestellt
        s$ = Translate$(s$,Mid$(Metazeichen$,&loop,1),"~"+Mid$(Metazeichen$,&loop,1))

    EndWhile

    Return s$

EndProc

Proc BlockWriteString

    Parameters Datei$, s$
    Declare Buffer#
    Dim Buffer#,Len(s$)+1
    String Buffer#,0 = s$
    BlockWrite Datei$, Buffer#, 0, Len( s$ )
    Dispose Buffer#

EndProc

Proc DeleteIniSection

    Parameters IniDatei$, SectionName$
    Declare SectionStart$, SectionEnde$, hIni&, IniGroesse&, IniContent$
    Declare StartPos&, xLen&, Erg$
    hier wird der Sektionsname in eckige Klammern gesetzt; er muß also ohne Klammern angegeben werden
    SectionStart$ = "[" + SectionName$ + "]"
    hier werden evtl. vorkommende Metazeichen ersetzt; die eckigen Klammern gehören auch dazu
    SectionStart$ = ErsetzeMetazeichen( SectionStart$ )
    jetzt wird das Metazeichen für den Zeilenanfang eingesetzt
    der Sektionsname wird also nur gefunden, wenn er ganz am Anfang steht (Leerzeichen+Tab erlaubt)
    SectionStart$ = "(?mi)^[ 	]*" + SectionStart$
    das Gleiche gilt für das Sektionsende; eine eckige öffnende Klammer am Zeilenbeginn
    SectionEnde$ = "(?m)^[ 	]*~["
    Ini-Datei in String einlesen
    IniGroesse& = FileSize( IniDatei$ )
    hIni& = Assign( IniDatei$ )
    OpenRW hIni&
    IniContent$ = GetChar$( hIni&, IniGroesse& )
    Close hIni&
    Erg$ = Match$( SectionStart$, IniContent$ )

    If Len(Erg$) > 0

        Sektion wurde gefunden
        StartPos im String merken und die Länge der Überschrift
        StartPos& = %MatchPos
        xLen& = %MatchLen
        Suche hinter der Überschrift nach dem nächsten Sektionsnamen
        Erg$ = Match$( SectionEnde$, Mid$(IniContent$,StartPos& + xLen&,IniGroesse&) )

        If Len(Erg$) = 0

            nicht gefunden; also ist es die letzte Sektion
            nur den Teil vor der zu löschenden Sektion behalten
            IniContent$ = Left$( IniContent$, StartPos& - 1 )

        Else

            Folgesektion gefunden; also zum Scalpell greifen...
            (%MatchPos + xLen& - 1) ist die Größe der Sektion
            IniContent$ = Del$( IniContent$, StartPos&, (%MatchPos + xLen& - 1) )

        EndIf

        BlockWriteString IniDatei$, IniContent$

    EndIf

EndProc

--------------------------------------
DER FOLGENDE CODE DIENT NUR ZUM TESTEN
--------------------------------------
eine INI erstellen und zeigen
cls
Declare Datei$, s$, hIni&
Datei$ = "C:WINDOWSKLEINER_TEST.INI"
s$ = "# so sieht die INI-Datei aus
[test1]
key1=alfa
key2=bravo
[test2]
key1=charly
key2=delta
[test3]
key1=echo
key2=fuchstritt
"
BlockWriteString Datei$,s$
Print s$
Print "
Jetzt [test2] löschen... (ENTER)"
WaitKey
eine Sektion löschen...
DeleteIniSection Datei$, "test2"
und zeigen
Cls
hIni& = Assign( Datei$ )
Reset hIni&

WhileNot EoF( hIni& )

    Input # hIni&, s$
    Print s$

EndWhile

Close hIni&
Print "
...Dies ist das Ergebnis... (ENTER)"
Print "
Jetzt noch eine Variante mit Leerzeichen und TAB vor dem Namen"
WaitKey
eine Variante mit Leerzeichen und Tab vor dem Namen
cls
Declare Datei$, s$, hIni&
Datei$ = "C:WINDOWSKLEINER_TEST.INI"
s$ = "# so sieht die INI-Datei aus
[test1]
key1=alfa
key2=bravo
[test2]
key1=charly
key2=delta
[test3]
key1=echo
key2=fuchstritt
"
BlockWriteString Datei$,s$
Print s$
Print "
Jetzt [test2] löschen... (ENTER)"
WaitKey
DeleteIniSection Datei$, "test2"
Cls
hIni& = Assign( Datei$ )
Reset hIni&

WhileNot EoF( hIni& )

    Input # hIni&, s$
    Print s$

EndWhile

Close hIni&
Print "
...Dies ist das Ergebnis... (ENTER)"
Print "
Jetzt noch eine Variante mit Groß-/Klein-Gemisch"
Print "(Suchwort ist nach wie vor qtest2q)"
WaitKey
eine Variante mit Groß-/Klein-Genisch (Suchwort ist nach wie vor "test2")
cls
Declare Datei$, s$, hIni&
Datei$ = "C:WINDOWSKLEINER_TEST.INI"
s$ = "# so sieht die INI-Datei aus
[test1]
key1=alfa
key2=bravo
[TeSt2]
key1=charly
key2=delta
[test3]
key1=echo
key2=fuchstritt
"
BlockWriteString Datei$,s$
Print s$
Print "
Jetzt [test2] löschen... (ENTER)"
WaitKey
DeleteIniSection Datei$, "test2"
Cls
hIni& = Assign( Datei$ )
Reset hIni&

WhileNot EoF( hIni& )

    Input # hIni&, s$
    Print s$

EndWhile

Close hIni&
Print "
...Dies ist das Ergebnis... (ENDE)"
Print "(INI wird wieder entfernt)"
Print "
Reguläre Ausdrücke in XProfan 10  --  einfach Klasse"
WaitKey
Erase Datei$
End

Schöne Grüße
Michael Wodrich

Da mich der Community-Refresh am Dateihochladen hindert, habe ich die Datei auf meinem Webspace geparkt.

[...] 

@iF: es wäre nett, wenn Du die Datei in die Community ziehst, damit ich sie wieder löschen kann...

 
Programmieren, das spannendste Detektivspiel der Welt.
06.06.2006  
 



[quote:c027d71b85=Michael Wodrich]@iF: es wäre nett, wenn Du die Datei in die Community ziehst, damit ich sie wieder löschen kann...[/quote:c027d71b85]
Hm ich hab die Zip einfach Deinem Beitrag beigefügt - damit landet sich ja automatisch auch im Downloadcenter. Ists das was Du meintest?

[quote:c027d71b85]Da mich der Community-Refresh am Dateihochladen hindert, habe ich die Datei auf meinem Webspace geparkt.[/quote:c027d71b85]
Nein nein das täuscht! Zwar wird der Ladebalken des Browser unterbrochen - aber der Upload wird trotzdem ausgeführt!
 
08.06.2006  
 




Michael
Wodrich
Dann war ich also wieder mal zu ungeduldig...

Danke.

Die neuen Möglichkeiten von XProfan 10 gefallen mir immer besser.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
09.06.2006  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.139 Betrachtungen

Unbenanntvor 0 min.
H.Brill07.12.2023
liveFamilie30.08.2012

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Michael Wodrich (2x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie