MFDLSort

Allgemein MFDL-Rahmen sortieren 3.01

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.484
Standort
Düsseldorf
Trophäen
*!
#1
Es ist oft schwierig einen Rahmen wieder zu finden, auch wenn man die Bezeichnung kennt. Einfacher wäre es, wenn die Rahmen alphanumerisch sortiert wären. Genau dieses leistet das folgende VB-Skript.

Code:
'FFSubmenu=Rahmen
'FFName=MFDL-Rahmen sortieren

'*************************************************************************
'*** Script MFDLsort.vbs zum Sortieren der FF-Rahmendatei MFDL.cfg     ***
'*** Version 1.06 / 06.04.2007 - Pfadanpasuung für Version 2.84 ab B86 ***
'*** Version 1.05 / 12.12.2006 - Leerzeilen werden gelöscht            ***
'*** Copyright (C) Harald Maeckler, Düsseldorf						   ***
'*************************************************************************
'*** Parameter  *****************************************************************************
Const KleinGross = True	'= True bedeutet Klein- werden wie Großbuchstaben behandelt			*
'						'= False heißt Sortierung erst nach A-Z und dann nach a-z			*
Const UmlautVerm = True	'= True bedeutet Ä, Ö, Ü, ä, ö, ü als Anf.Buchst. werden sortiert	*
'								wie      Ae,Oe,Ue,ae,oe,ue									*
'						'= False bedeutet, dass der Anfangsbuchstabe unverändert bleibt	und	*
'								Rahmen mit Umlauten beginnend nach hinten sortiert werden	*
'********************************************************************************************

'Definitionen
Dim Quelldatei	'Rahmendatei
Dim Ziel_Datei	'temporäre Zieldatei
Dim objFS		'Filesystem-Objekt
Dim Antwort		'Antwort auf Anfrage
Dim SortText	'TextDatei
Dim x, Y		'Zählvariable
Dim ZB			'Zufallsbuchstabe
Dim Feld()		'Array
Dim tmpString	'Temporärer String
Dim VString		'Vergleichsstring
Dim Eingetragen 'True or False - Rahmen wurde eingetragen
Dim AB			'Anfangsbuchstabe
Dim ABn			'Anfangsbuchstabe neu
Dim Pos			'Position
Dim Anzahl

'Konstanten
Const ForReading = 1, ForWriting = 2

'Festlegungen
Quelldatei = FF_GetScriptPath() & "\MFDL.cfg"
'msgbox Quelldatei
Ziel_Datei = FF_GetScriptPath() & "\MFDL.tmp"

'*************************************************************************

Set objFS = CreateObject("Scripting.FileSystemObject")			'FileSytemObject

'Prüfen ob Rahmendatei MFDL.cfg vorhanden ist
If not (objFS.FileExists(Quelldatei)) Then
	MsgBox "Die Rahmendatei" & vbCr & Quelldatei & vbCr & "wurde nicht gefunden!" _
	& vbCr & "Der Vorgang wird abgebrochen!"
else
	'Abfragen ob Sortiervorgang gestartet werden soll
	Antwort = MsgBox ("Es wird dringend empfohlen vor dem Sortieren eine Sicherheitskopie der Datei" _
          & vbCr & Quelldatei & " anzulegen." & vbCr & vbCr _
          & "Soll jetzt der Sortiervorgang gestartet werden?", vbYesNo , "Sicherheitsabfrage")
	
	if Antwort = vbYes then
		Call FeldFuellung
		Call QuickSort(LBound(Feld), UBound(Feld))
		Call RahmenSort_Datei
		Call Umbenennung
		Erase Feld

		MsgBox "Der Sortiervorgang ist abgeschlossen!" _
				& vbCr & "Es wurden " & Anzahl & " Rahmen sortiert.", vbOK, "Mitteilung"
	end if
end if
'*************************************************************************

Sub FeldFuellung()
'Füllung des Arrays mit Zeilen aus TextDatei

Set SortText = objFS.OpenTextFile(Quelldatei, ForReading)
x = 0
	Do
		tmpString = SortText.ReadLine
		if instr(tmpString,"#") = 1 then 
			x = x + 1
		end if
	Loop Until SortText.AtEndOfStream
SortText.Close

Redim Feld(x)
Set SortText = objFS.OpenTextFile(Quelldatei, ForReading)

y = 0
	Do
		tmpString = SortText.ReadLine
		if instr(tmpString,"#") = 1 then 

			if UmlautVerm then															'Umlautvermeidung?
				AB = mid(tmpString,2,1)
				if instr("Ö-Ä-Ü-ö-ä-ü",AB) then
					select case AB
						case "Ä" ABn = "Ae"
						case "Ö" ABn = "Oe"
						case "Ü" ABn = "Ue"
						case "ä" ABn = "ae"
						case "ö" ABn = "oe"
						case "ü" ABn = "ue"
					case else
					end select
					tmpString = "#" & ABn & mid(tmpString,3) & "\" & AB
					'msgbox tmpString
				end if
			end if
			
			If KleinGross then Feld(y) = Ucase(tmpString) else Feld(y) = tmpString		'mit Ucase?
						
			y = y + 1
		end if
	Loop Until SortText.AtEndOfStream
SortText.Close
End Sub

'*************************************************************************

Sub QuickSort(ByVal LB, ByVal UB)
'Sortieren des Arrays 'Feld'

    Dim P1, P2, Ref, TEMP

    P1 = LB
    P2 = UB
    Ref = Feld((P1 + P2) / 2)
    
    Do
        Do While Feld(P1) < Ref
            P1 = P1 + 1
        Loop
 
        Do While Feld(P2) > Ref
            P2 = P2 - 1
        Loop

        If P1 <= P2 Then
            TEMP = Feld(P1)
            Feld(P1) = Feld(P2)
            Feld(P2) = TEMP
           
            P1 = P1 + 1
            P2 = P2 - 1
        End If
    Loop Until P1 > P2

    If LB < P2 Then Call QuickSort(LB, P2)
    If P1 < UB Then Call QuickSort(P1, UB)

End Sub

'*************************************************************************

Sub RahmenSort_Datei()
'Erzeugung der sortierten Rahmendatei
Set SortText = objFS.OpenTextFile(Quelldatei, ForReading)
Set ZielText  = objFS.CreateTextFile(Ziel_Datei, True)

	For y = 0 to x
		
		if instr(Feld(y),"#") = 1 then
		
		Anzahl = Anzahl +1
		
		Pos = instr(Feld(y),"\")
		if Pos > 0 then					'Korrektur bei Umlauten
			AB = right(Feld(y),1)
			Feld(y) = "#" & AB & mid(Feld(y),4,Pos-4)
			'msgbox Feld(y)
		end if
		
		Set SortText = objFS.OpenTextFile(Quelldatei, ForReading)

			Do
				tmpString = SortText.ReadLine
			if KleinGross then VString = Ucase(tmpString) else VString = tmpString	'mit Ucase?
			if VString = Feld(Y) then
				ZielText.WriteLine tmpString
				Do
					tmpString = SortText.ReadLine
					if left(tmpString,1) <> " " and left(tmpString,1) <> vbCr then	'korrigiert am 7.4.07
					'if len(tmpString) > 0 then										'wegen Leerzeilen	
						if instr(tmpString,"#") = 1 then
							Eingetragen = True
							exit do
						end if
						ZielText.WriteLine tmpString
					end if
				Loop Until SortText.AtEndOfStream
			end if
			if Eingetragen then
				Eingetragen = False
				exit do
			end if
			Loop Until SortText.AtEndOfStream

		SortText.Close
		End if
	Next

ZielText.Close

End Sub

'*************************************************************************

Sub Umbenennung ()
'Kopieren der sortierten Datei auf die Ursprungsdatei

objFS.CopyFile Ziel_Datei, Quelldatei, True
objFS.DeleteFile (Ziel_Datei)

End Sub

'*************************************************************************
Das Skript wird wie üblich eingebunden:
- Mit F11 den FFSkript-Editor öffnen
- Den Code einfügen
- VBScript aktivieren
- Speichern (Name z.B. MFDL_Sort)
- Automatisch Konfigurieren
- FF schließen und wieder starten
- Bei den Skripten findet man jetzt unter Rahmen 'MFDL-Rahmen sortieren'

Es wird empfohlen vor Anwendung von der Rahmendatei MFDL.cfg im Skriptverzeichnis vom FF-Programmverzeichnis eine Sicherheitskopie anzulegen.

Man kann jetzt auch dafür sorgen, dass die persönlichen Favoriten immer am Anfang der Liste angezeigt werden. Man braucht einen Rahmen nur nochmals abzuspeichern und dem Namen z.B. -A- vor zu setzen, dem nächsten Rahmen -B- u.s.w.. Nach einem Sortiervorgang stehen die Favoriten am Anfang. Nicht vergessen die doppelten Rahmen zu löschen.
Man kann natürlich auch die Datei MFDL.cfg direkt editieren und dann sortieren.

--------------------------------------------------------------------------------
Am 30.10.06 leicht modifizierte Version 1.04 eingebracht.
Update von 1.03 ist nicht unbedingt nötig.
--------------------------------------------------------------------------------
Am 26.01.2007 neue Version 1.05 eingebracht.
Leerzeilen in der Rahmenliste werden sicher gelöscht
und Ä, Ö, Ü, ä, ö, ü als Anfangsbuchstabe werden sortiert wie Ae,Oe,Ue,ae,oe,ue
--------------------------------------------------------------------------------
Am 06.04.2007 neue Version 1.06
Berücksichtigung des neuen Einstellpfads ab V2.84 B86

--------------------------------------------------------------------------------
 
Zuletzt bearbeitet:

Irene

Mitglied
Dabei seit
10.08.05
Beiträge
1.609
Standort
Luftlinie 20 km östlich von Stuttgart
Trophäen
**!!!!
#2
AW: MFDL-Rahmen sortieren

genau dieses alphabetische Sortieren habe ich mir auch schon gewünscht.

Da ich aber mit solchen Installationen etwas unsicher bin, warte ich jetzt einfach mal, bis von irgendwoher der Ruf kommt "klappt bestens" ;D

Mit anderen Worten, ich hätte gerne "Vorkoster" ;)
 

Irene

Mitglied
Dabei seit
10.08.05
Beiträge
1.609
Standort
Luftlinie 20 km östlich von Stuttgart
Trophäen
**!!!!
#4
AW: MFDL-Rahmen sortieren

ha ha ha, Heinz, du kennst mich doch inzwischen.
Ich lasse mich gerne als Feigling bezeichnen ;D ;D ;D - damit habe ich kein Problem.
Aber wenn ich nicht damit zurecht komme, dann bekommst du vielleicht wieder ein Problem, gelle ;)
 

gope

Mitglied
Dabei seit
28.10.03
Beiträge
884
Standort
Bregenz
Trophäen
{!}***
#5
AW: MFDL-Rahmen sortieren

Trau dich einfach, Irene.
Ich habs grad gemacht. Die Sortierung funktioniert tadellos, d.h. alle Rahmen sind alphanumerisch geordnet worden.

Peter
 

cooper

Mitglied
Dabei seit
07.09.06
Beiträge
5
Standort
Korntal-Muenchingen
#7
AW: MFDL-Rahmen sortieren

Hallo,
habe gerade das neue Script auch einmal ausprobiert und denke das die Rahmen deren Name mit einem Kleinbuchstaben beginnt nicht alphabetisch einsortiert werden.

Grüße Martin
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.484
Standort
Düsseldorf
Trophäen
*!
#8
AW: MFDL-Rahmen sortieren

Hallo Cooper,

cooper hat gesagt.:
.. habe gerade das neue Script auch einmal ausprobiert und denke das die Rahmen deren Name mit einem Kleinbuchstaben beginnt nicht alphabetisch einsortiert werden.
Ich habe es gerade ausprobiert und tatsächlich festgestellt, dass es mit den Kleinbuchstaben nicht funktioniert. Das Problem wird mich beschäftigen.

Um die Favoriten nach vorne zu bekommen, ist es am besten, den Namen eine Nummerierung mit immer gleicher Stellenzahl voranzustellen, z.B. 001-, 002-, 003- usw..
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.484
Standort
Düsseldorf
Trophäen
*!
#9
AW: MFDL-Rahmen sortieren

Hallo Cooper,
die Sortierung ist doch richtig.
Sie erfolgt nach dem ASCII-Zeichensatz. Dort ist die Reihenfolge:
- die Sonderzeichen [Leer],!,",#,$,%,&,',(,),*,+,,,-,/
- die Ziffern 0 bis 9
- die Sonderzeichen :,;,<,=,>,?,@
- die Großbuchstaben A bis Z (ohne Ä,Ö,Ü)
- die Sonderzeichen [,\,],^,_,`
- die Kleinbuchstaben a bis z (ohne ä,ö,ü)
- weitere Sonderzeichen
- Ä, Ö, Ü
- weitere Sonderzeichen
- ä, ö, ü

So ist es auch zu erklären, dass z.B. der Ölbildrahmen nach der Sortierung immer noch am Ende steht; es sei denn man versieht ihn mit einem entsprecheden Vorspann.
 

cooper

Mitglied
Dabei seit
07.09.06
Beiträge
5
Standort
Korntal-Muenchingen
#10
AW: MFDL-Rahmen sortieren

Ah, das erklärt die Reihenfolge natürlich. Ich werde einfach die Kleinbuchstaben zu Grossbuchstaben machen und Ö zu OE. Ich tue mich damit leichter da mein Gehirn nicht nach ASCII-Regeln denkt ;)
 

Niels1938

Mitglied
Dabei seit
15.05.03
Beiträge
1.682
Standort
15 km nördlich von Kopenhagen, Dänemark
#11
AW: MFDL-Rahmen sortieren

Hallo Mecki14,

Ich glaube deine Erklärung über Sortierliste ist nicht ganz korrekt, ist es nicht so,
dass es wie gewöhnlich in Windows wird nach ANSI sortiert, in den Reihenfolge du schreibst,
und dass es nicht ganz das selbe ist wie in ASCII , die zB bei DOS verwendet wird ??

Grüsse,
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.484
Standort
Düsseldorf
Trophäen
*!
#12
AW: MFDL-Rahmen sortieren

Version 1.03

Da die Handhabung sicher einfacher ist, wenn Klein- und Großbuchstaben gleich behandelt werden, werden in der neuen Version Klein- wie Großbuchstaben behandelt. Setzt man den Parameter KleinGross = False gilt wieder die alte Sortierreihenfolge.
Außerdem wird am Ende die Anzahl der sortierten Rahmen angezeigt.
Alle Änderungen sind im Code ganz oben bereits berücksichtigt.

Übrigens, Niels 1938,
ich bin mir nicht sicher ob nach ANSI sortiert wird, da in den MICROSOFT-Erläuterungen zu WINDOWS-Skript nur die ASCII-Tabelle angezeigt wird. Für den normalen Anwender ist diese Diskussion aber sowieso nur akademisch.
 
Zuletzt bearbeitet:

gope

Mitglied
Dabei seit
28.10.03
Beiträge
884
Standort
Bregenz
Trophäen
{!}***
#13
AW: MFDL-Rahmen sortieren

Schön! Und wo ist die 1.03-Version nur zu finden. Im Zubehörbereich ist sie nicht.

Peter
 

gope

Mitglied
Dabei seit
28.10.03
Beiträge
884
Standort
Bregenz
Trophäen
{!}***
#15
AW: MFDL-Rahmen sortieren

Das muss einem ja gesagt werden, dass das im ersten Post gezeigte Scipt jetzt durch ein neues ersetzt worden ist.
Natürlich habe ich nicht auf dessen Versionsnummer geschaut - bin also selbst schuld.

Peter
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.484
Standort
Düsseldorf
Trophäen
*!
#16
AW: MFDL-Rahmen sortieren

Hallo Irene,

Irene hat gesagt.:
... da ich aber mit solchen Installationen etwas unsicher bin, warte ich jetzt einfach mal, bis von irgendwoher der Ruf kommt "klappt bestens"
es interessiert mich brennend, ob Du Dich inzwischen getraut hast!
 

vawil

Mitglied
Dabei seit
04.09.04
Beiträge
146
Standort
Vechta
#17
AW: MFDL-Rahmen sortieren

Ich habe meine Rahmen sortiert. So was habe ich schon lange gesucht.
Danke

Wilfried
 

Irene

Mitglied
Dabei seit
10.08.05
Beiträge
1.609
Standort
Luftlinie 20 km östlich von Stuttgart
Trophäen
**!!!!
#18
AW: MFDL-Rahmen sortieren

@Mecki,
falls du noch nicht darüber informiert wurdest - Rentner haben einfach keine Zeit ;D ;D

Nein, ich habe es noch nicht probiert - ich brauche dazu etwas mehr Ruhe als ich sie gerade habe. Aber irgendwann mache ich mich dran ;) - es läuft mir ja gottlob nicht weg.
 

Rabe

Mitglied
Dabei seit
11.11.03
Beiträge
1.615
Trophäen
{*!!} **** !!!!! & ¡¡ [*]!
#19
AW: MFDL-Rahmen sortieren

@Mecki,

herzlichen Dank für das tolle Sortierskript. Es ist wirklich sehr viel schneller, seine Rahmen nach Sortierung zu finden.


Harzliche Grüße


(R)abe
 
Zuletzt bearbeitet:
Oben