| |
|
|
Michael Wodrich | there it Yes well many need have I the Sektionslöschen time in XProfan v10.0 written. Who not yet debug can -- EXE-File of these code is enclosed. CompileMarkSeparation!
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
Best wishes Michael Wodrich
there me the Community-Refresh on the Dateihochladen hindert, have I The File my Webspace parked.
[...]
@iF: it would nice, if you The File in the community ziehst, so I tappt im dunkeln again delete can... |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 06/06/06 ▲ |
|
|
|
|
| [quote:c027d71b85=Michael Wodrich]@iF: it would nice, if you The File in the community ziehst, so I tappt im dunkeln again delete can...[/quote:c027d71b85] Hm I Have The zipper simply Your Posting enclosed - so alights itself Yes automatically in Downloadcenter. Ists the what You meant?
[quote:c027d71b85]there me the Community-Refresh on the Dateihochladen hindert, have I The File my Webspace parked.[/quote:c027d71b85] No No the täuscht! of course becomes the Ladebalken the Browser interrupted - but the Upload becomes nevertheless carryed out! |
|
|
| |
|
|
|
Michael Wodrich | then i was means again To eager...
Thank you.
The new Opportunities of XProfan 10 fallen me always rather.
Best wishes Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 06/09/06 ▲ |
|
|
|