| |
|
|
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! |
|
|
| |
|
|
|
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 ▲ |
|
|
|