| |
|
|
Michael Wodrich | Como lo sí wohl viele brauchen Yo el Sektionslöschen veces en XProfan v10.0 geschrieben. Wer lo todavía no austesten kann -- EXE-Expediente con diesem Code es beigefügt. KompilierenMarcaSeparación!
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
Borrar Expediente$
End
Schöne Grüße Michael Wodrich
Como mich Comunidad-Refresh al Dateihochladen hindert, Yo el Expediente mi Webspace geparkt.
[...]
@IF: lo wäre nett, si el Expediente en el Comunidad ziehst, así Yo ellos otra vez löschen kann... |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 06.06.2006 ▲ |
|
|
|
|
| [quote:c027d71b85=Michael Wodrich]@IF: lo wäre nett, si el Expediente en el Comunidad ziehst, así Yo ellos otra vez löschen kann...[/quote:c027d71b85] Hm Yo tener el Zip simplemente Deinem Contribución beigefügt - así landet se sí automáticamente auch en el Downloadcenter. Ists el qué Usted meintest?
[quote:c027d71b85]Como mich Comunidad-Refresh al Dateihochladen hindert, Yo el Expediente mi Webspace geparkt.[/quote:c027d71b85] Nein nein el täuscht! Zwar se el Ladebalken des Navegador unterbrochen - pero la Upload se trotzdem ausgeführt! |
|
|
| |
|
|
|
Michael Wodrich | Dann war Yo also otra vez veces a ungeduldig...
Gracias.
El neuen Möglichkeiten de XProfan 10 gefallen me siempre mejor.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 09.06.2006 ▲ |
|
|
|