Italia
Fonte/ 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-File 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"
'./../../function-references/xprofan/waitkey/'>WaitKey
Erase File$
End

Schöne Grüße
Michael Wodrich

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

[...] 

@iF: es wäre nett, wenn Du die File 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 File 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 File meinem Webspace geparkt.[/quote:c027d71b85]
Nein nein das täuscht! Zwar wird der Ladebalken des Browser unterbrochen - aber der Upload wird trotzdem corsa!
 
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


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.123 Views

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

Themeninformationen

Dieses Thema hat 2 subscriber:

Michael Wodrich (2x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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