<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://znil.net/index.php?action=history&amp;feed=atom&amp;title=ZnilTools%3AJP_ProfileAnalyzer</id>
	<title>ZnilTools:JP ProfileAnalyzer - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://znil.net/index.php?action=history&amp;feed=atom&amp;title=ZnilTools%3AJP_ProfileAnalyzer"/>
	<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=ZnilTools:JP_ProfileAnalyzer&amp;action=history"/>
	<updated>2026-04-20T08:40:15Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in znilwiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://znil.net/index.php?title=ZnilTools:JP_ProfileAnalyzer&amp;diff=11085&amp;oldid=prev</id>
		<title>BLinz: /* Beispiele */</title>
		<link rel="alternate" type="text/html" href="https://znil.net/index.php?title=ZnilTools:JP_ProfileAnalyzer&amp;diff=11085&amp;oldid=prev"/>
		<updated>2018-11-19T16:15:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Beispiele&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;u&amp;gt;&amp;#039;&amp;#039;&amp;#039;Changelog:&amp;#039;&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
* 19.11.2018: erste Version 1.0.0.17&lt;br /&gt;
* 19.11.2018: Version 1.0.0.25: In den Statistiken wird nun auch die Anzahl der Schlüssel angezeigt, Neuer Parameter --noprogress und bessere Parameter-Verarbeitung&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Download==&lt;br /&gt;
Der Quellcode ist im Download mit enthalten!&amp;lt;br&amp;gt;&lt;br /&gt;
* Version 1.0.0.17: [[Media:JP_ProfileAnalyzer_V1.0.0.17.zip|JP_ProfileAnalyzer_V1.0.0.17.zip]]&lt;br /&gt;
* Version 1.0.0.25: [[Media:JP_ProfileAnalyzer_V1.0.0.25.zip|&amp;#039;&amp;#039;&amp;#039;JP_ProfileAnalyzer_V1.0.0.25.zip&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Vorwort==&lt;br /&gt;
Ich wollte ein paar &amp;lt;code&amp;gt;JPUser.dat&amp;lt;/code&amp;gt; auf deren Inhalt hin analysieren. In der Regel interessiert mich welchen Anteil welche Software an der Registry hat.&amp;lt;br&amp;gt;&lt;br /&gt;
Dazu habe ich das hier beschriebene Tool geschrieben.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Anleitung==&lt;br /&gt;
Einfach das Programm zusammen mit einer &amp;lt;code&amp;gt;JPUser.dat&amp;lt;/code&amp;gt; starten:&lt;br /&gt;
 JP_ProfileAnalyzer.exe JPUser.dat&lt;br /&gt;
Folgende Parameter sind noch möglich:&lt;br /&gt;
 --depth=    : Bis zu welcher Tiefe sollen die Schlüssel zusammengefasst werden, Default Wert ist --depth=3&lt;br /&gt;
 --show=     : Ab welchen Prozentwert sollen die Werte angezeigt werden, Default Wert ist --show=10, Minimalwert ist 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Beispiele==&lt;br /&gt;
:[[Datei:ClipCapIt-181119-171429.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:ClipCapIt-181119-171541.PNG]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man mit der &amp;lt;code&amp;gt;--depth=&amp;lt;/code&amp;gt; ein wenig spielt bekommt man dann auch den Verursacher eines Riesen-Profiles heraus:&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:ClipCapIt-181119-162628.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
In diesem Fall hat sicher der &amp;quot;PhotoPrintingWizard&amp;quot; sämtliche Drucker in allen jemals vorhandenen Sitzung für jeden Server gemerkt,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tipps und Merkwürdiges Verhalten==&lt;br /&gt;
Hier Analysiere ich ein Profil mit der Standardtiefe &amp;lt;code&amp;gt;--depth=3&amp;lt;/code&amp;gt;:&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:ClipCapIt-181119-163929.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
Wenn ich die Tiefe jedoch um einen erhöhe verschwindet der Eintrag wieder (&amp;lt;code&amp;gt;--depth=4&amp;lt;/code&amp;gt;):&amp;lt;br&amp;gt;&lt;br /&gt;
:[[Datei:ClipCapIt-181119-164043.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
Das ist erst einmal merkwürdig - aber trotzdem logisch:&amp;lt;br&amp;gt;&lt;br /&gt;
Die verwendeten Begriff sind wie folgt:&amp;lt;br&amp;gt;&lt;br /&gt;
 Schlüssel: HKEY_CURRENT_USER\Software\Quadram\Ergo8\&lt;br /&gt;
 Wert:      Test REG_SZ Ich bin ein Wert&lt;br /&gt;
* Er addiert alle Werte unterhalb eines Registry-Schlüssels sofern diese der entsprechenden Tiefe entsprechen. Bei der Tiefe von 3 ist die Ebene &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Ergo8&amp;#039;&amp;#039;&amp;#039;&amp;#039; halt die 3. Ebene (HKCU zählt nicht mit)&lt;br /&gt;
* Bei der Anzahl werden nur die Werte addiert. Bei dem Volumen zählt er aber auch die Schlüssel / den Textstring dieser selbst mit, in diesem Fall die ganzen Unterschlüssel. Bei einem Programm mit vielen Schlüsseln kommt da einiges zusammen.&lt;br /&gt;
* Erhöhe ich nun die Tiefe auf 4 wird der Schlüssel nicht mehr angezeigt - weil jede der Nachfolgenden Ebenen unter dem Schwellwert von &amp;lt;code&amp;gt;--show=10&amp;lt;/code&amp;gt; bleibt. Das ist nämlich z.B. ein Programm mit über 8.700 Unterschlüsseln die jeweils nur 8 Werte enthalten. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Quellcode==&lt;br /&gt;
Wie so oft mit AutoIt geschrieben:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;AutoIt&amp;quot;&amp;gt;&lt;br /&gt;
#NoTrayIcon&lt;br /&gt;
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
#AutoIt3Wrapper_Icon=Icon256-32.ico&lt;br /&gt;
#AutoIt3Wrapper_UseUpx=n&lt;br /&gt;
#AutoIt3Wrapper_Change2CUI=y&lt;br /&gt;
#AutoIt3Wrapper_Res_Description=Analyze JPUser.dat&lt;br /&gt;
#AutoIt3Wrapper_Res_Fileversion=1.0.0.26&lt;br /&gt;
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y&lt;br /&gt;
#AutoIt3Wrapper_Res_Language=1031&lt;br /&gt;
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****&lt;br /&gt;
#include &amp;lt;array.au3&amp;gt;&lt;br /&gt;
#Include &amp;lt;string.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dim $sFilename				; Dateiname inklusive Pfad zur JPUser.dat&lt;br /&gt;
Dim $sTempLine				; die eingelesenen Zeilen werden hier temporär gespeichert&lt;br /&gt;
Dim $hSourceFile			; Zeiger auf die JPUser.dat&lt;br /&gt;
Dim $iTimerstart			; Startzeit der Filterung&lt;br /&gt;
Dim $iTimerend				; Endzeit der Filterung&lt;br /&gt;
Dim $iLineCounter = 0		; Zeilenzählen - als Status geben wir alle 100 Zeilen einen Punkt aus&lt;br /&gt;
&lt;br /&gt;
Dim $i_MaxDepth = 3		; Maximale Schlüsseltiefe / Suchtiefe beim Addieren der Werte, aller darunter wird im Übergeordneten Schlüssel mit gespeichert&lt;br /&gt;
Dim $i_CurrentDepth = 0&lt;br /&gt;
Dim $s_temp = &amp;quot;&amp;quot;&lt;br /&gt;
Dim $s_LastKey = &amp;quot;&amp;quot;&lt;br /&gt;
Dim $i_TotalValues = 0	; Anzahl aller Werte&lt;br /&gt;
Dim $i_TotalSize = 0	; Größe alle Werte in Summe&lt;br /&gt;
Dim $i_TotalKeys = 0	; Anzahl aller Schlüssel&lt;br /&gt;
Dim $a_JPUserDAT[1][7]	; [0][0] = Anzahl Schlüssel&lt;br /&gt;
						; [x][1] = Name des Schlüssels&lt;br /&gt;
						; [x][2] = Anzahl der Werte unter diesem Schlüssel&lt;br /&gt;
						; [x][3] = Größe der Werte unter diesem Schlüssel&lt;br /&gt;
						; [x][4] = Anteil Anzahl an Gesamt (Prozent)&lt;br /&gt;
						; [x][5] = Anteil Größe an Gesamt (Prozent)&lt;br /&gt;
						; [x][6] = Anzahl an Schlüsseln in diesem Schlüsselzweig&lt;br /&gt;
$a_JPUserDAT[0][0] = 0&lt;br /&gt;
$a_JPUserDAT[0][1] = &amp;quot;Name&amp;quot;&lt;br /&gt;
$a_JPUserDAT[0][2] = &amp;quot;Anzahl Werte&amp;quot;&lt;br /&gt;
$a_JPUserDAT[0][3] = &amp;quot;Volumen Werte&amp;quot;&lt;br /&gt;
$a_JPUserDAT[0][4] = &amp;quot;Anteil Anzahl&amp;quot;&lt;br /&gt;
$a_JPUserDAT[0][5] = &amp;quot;Anteil Größe&amp;quot;&lt;br /&gt;
$a_JPUserDAT[0][6] = &amp;quot;Anteil Prozent&amp;quot;&lt;br /&gt;
Dim $sBackupTempline = &amp;quot;&amp;quot;&lt;br /&gt;
Dim $i_ShowValuesOver = 10 ; Nur Werte über 10% anzeigen&lt;br /&gt;
Dim $b_NoProgress = False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;                             10        20        30        40        50        60        70        80&lt;br /&gt;
;                 	 12345678901234567890123456789012345678901234567890123456789012345678901234567890&lt;br /&gt;
Dim $sHelp = 		&amp;#039;+------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;| JP_ProfileAnalyzer.exe - Version &amp;#039; &amp;amp; FileGetVersion(@ScriptName) &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;+------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;| 2011-2015 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;+------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;Analysiert den Inhalt einer JPUser.dat und listet die Schlüssel &amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;in Prozent für Anzahl und Volumen im Verhältnis zur Gesamtdatei auf&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;Damit kann man sich einen Überblick über die Belegung verschaffen.&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;-------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;Aufruf:&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@ScriptName &amp;amp; &amp;#039; [Pfad][Dateinname] &amp;lt;Parameter&amp;gt;&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;Beispiel:&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@ScriptName &amp;amp; &amp;#039; D:\Profiles\Benutzer\JumpingProfile\JPUser.dat&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;Parameter:&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; --depth=     : Bis zu welcher Tiefe sollen die Schlüssel zusammengefasst werden&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;                Default Wert ist --depth=3&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; --show=      : Ab welchen Prozentwert sollen die Werte angezeigt werden,&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;                Default Wert ist --show=10, Minimalwert ist 1&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; --noprogress : Keine Fortschrittsanzeige mit Punkten anzeigen&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					@CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; Die Reihenfolger der Parameter und Optionen ist beliebig. Wird bei einem&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; Parameter/Option kein - am Anfang gefunden so wird dieser &amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039; als Dateiname gesetzt.&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;+------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;| JP_ProfileAnalyzer ist FREEWARE! Kopieren, weitergeben ausdrücklich erlaubt!&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;| https://znil.net/index.php?title=ZnilTools:JP_ProfileAnalyzer&amp;#039; &amp;amp; @CRLF &amp;amp; _&lt;br /&gt;
					&amp;#039;+------------------------------------------------------------------------------&amp;#039; &amp;amp; @CRLF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; ###################################################################################&lt;br /&gt;
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird&lt;br /&gt;
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt&lt;br /&gt;
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&amp;amp;threadID=9461&amp;amp;highlight=ANSI2OEM&lt;br /&gt;
Func _ANSI2OEM($text)&lt;br /&gt;
	$text = DllCall(&amp;#039;user32.dll&amp;#039;, &amp;#039;Int&amp;#039;, &amp;#039;CharToOem&amp;#039;, &amp;#039;str&amp;#039;, $text, &amp;#039;str&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	Return $text[2]&lt;br /&gt;
EndFunc   ;==&amp;gt;_ANSI2OEM&lt;br /&gt;
&lt;br /&gt;
Func _ByteSuffix($iBytes, $iRound = 2) ; By Spiff59&lt;br /&gt;
    Local $A, $aArray[9] = [&amp;quot; B&amp;quot;, &amp;quot; KB&amp;quot;, &amp;quot; MB&amp;quot;, &amp;quot; GB&amp;quot;, &amp;quot; TB&amp;quot;, &amp;quot; PB&amp;quot;, &amp;quot;EB&amp;quot;, &amp;quot;ZB&amp;quot;, &amp;quot;YB&amp;quot;]&lt;br /&gt;
    While $iBytes &amp;gt; 1023&lt;br /&gt;
        $A += 1&lt;br /&gt;
        $iBytes /= 1024&lt;br /&gt;
    WEnd&lt;br /&gt;
    Return Round($iBytes, $iRound) &amp;amp; $aArray[$A]&lt;br /&gt;
EndFunc   ;==&amp;gt;_ByteSuffix&lt;br /&gt;
&lt;br /&gt;
Func _AddThousandDotNEU($iZahl)&lt;br /&gt;
	Return StringRegExpReplace(StringReverse(StringRegExpReplace(StringReverse($iZahl),&amp;quot;\d{3}&amp;quot;,&amp;quot;\0.&amp;quot;)),&amp;quot;(?&amp;lt;![0-9])\.&amp;quot;,&amp;quot;&amp;quot;,1)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; ###################################################################################&lt;br /&gt;
; Hauptprogramm&lt;br /&gt;
$iTimerstart = TimerInit()&lt;br /&gt;
&lt;br /&gt;
; Prüfen  ob ein Parameter angegeben wurde - sonst beenden&lt;br /&gt;
If $CmdLine[0] = 0 Then&lt;br /&gt;
	ConsoleWrite(_ANSI2OEM(&amp;quot;FEHLER - Keine Datei angegeben, /? für Hilfe&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	Exit 0&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
;Prüfen ob wir die Hilfe ausgeben sollen&lt;br /&gt;
If $CmdLine[1] = &amp;quot;/?&amp;quot; Then&lt;br /&gt;
	ConsoleWrite(_ANSI2OEM($sHelp))&lt;br /&gt;
	Exit 0&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
For $i = 1 To (UBound($CmdLine) - 1) Step 1&lt;br /&gt;
	If StringLeft($CmdLine[$i], 8) = &amp;quot;--depth=&amp;quot; Then&lt;br /&gt;
		$i_MaxDepth = Int(StringMid($CmdLine[$i], 9))&lt;br /&gt;
		If $i_MaxDepth = 0 Then&lt;br /&gt;
			$i_MaxDepth = 3&lt;br /&gt;
		EndIf&lt;br /&gt;
	ElseIf StringLeft($CmdLine[$i], 7) = &amp;quot;--show=&amp;quot; Then&lt;br /&gt;
		$i_ShowValuesOver = Int(StringMid($CmdLine[$i], 8))&lt;br /&gt;
		If $i_ShowValuesOver = 0 Then&lt;br /&gt;
			$i_ShowValuesOver = 10&lt;br /&gt;
		EndIf&lt;br /&gt;
	ElseIf $CmdLine[$i] = &amp;quot;--noprogress&amp;quot; Then&lt;br /&gt;
		$b_NoProgress = True&lt;br /&gt;
	ElseIf StringLeft($CmdLine[$i],1) = &amp;quot;-&amp;quot; Then&lt;br /&gt;
		ConsoleWrite(_ANSI2OEM(&amp;quot;Unbekannter Parameter: &amp;quot; &amp;amp; $CmdLine[$i] &amp;amp; @CRLF))&lt;br /&gt;
		Exit 1&lt;br /&gt;
	Else&lt;br /&gt;
		$sFilename = $CmdLine[$i]&lt;br /&gt;
	EndIf&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Holen wir uns den Dateinamen - oder was auch immer da steht&lt;br /&gt;
;~ $sFilename = $CmdLine[1]&lt;br /&gt;
ConsoleWrite(&amp;quot;STATUS - Verarbeite Datei &amp;quot; &amp;amp; $sFilename)&lt;br /&gt;
ConsoleWrite(@CRLF &amp;amp; &amp;quot;=&amp;gt; JP_ProfileAnalyzer = 2018 znil.net &amp;lt;=&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
&lt;br /&gt;
; Analyze!&lt;br /&gt;
ConsoleWrite(&amp;quot;STATUS - Analysiere Datei &amp;quot;)&lt;br /&gt;
$hSourceFile = FileOpen($sFilename,0)&lt;br /&gt;
If $hSourceFile = -1 Then&lt;br /&gt;
	ConsoleWrite(_ANSI2OEM(@CRLF &amp;amp; &amp;quot;FEHLER - Konnte &amp;quot; &amp;amp; $sFilename &amp;amp; &amp;quot;nicht öffnen&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
	Exit 1&lt;br /&gt;
EndIf&lt;br /&gt;
;~ $hTargetFile = FileOpen($sFilename &amp;amp; &amp;quot;.temp.txt&amp;quot;,34)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While 1&lt;br /&gt;
	$sTempLine  = FileReadLine($hSourceFile)&lt;br /&gt;
	If @error &amp;lt;&amp;gt; -1 Then               ;123456789012345678&lt;br /&gt;
		$sBackupTempline = $sTempLine ; Wert einmal sichern, inklusive der Umgebung hinten dran&lt;br /&gt;
		If StringLeft($sTempLine,18) = &amp;quot;HKEY_CURRENT_USER\&amp;quot; Then&lt;br /&gt;
			$i_TotalKeys = $i_TotalKeys + 1&lt;br /&gt;
			; Schritt 0: Umgebung hinten abschneiden&lt;br /&gt;
			$sTempLine = StringReverse($sTempLine)&lt;br /&gt;
			$sTempLine = StringMid($sTempLine, StringInStr($sTempLine, &amp;quot;[&amp;quot;) + 2)&lt;br /&gt;
			$sTempLine = StringReverse($sTempLine)&lt;br /&gt;
&lt;br /&gt;
			; Schritt 1: Die Tiefe des Schlüssel ermitteln. Das machen wir indem wir die Anzahl der \ Zählen. Nicht 100% Perfekt aber ausreichend.&lt;br /&gt;
			$s_temp = StringReplace($sTempLine, &amp;quot;\&amp;quot;, &amp;quot;|&amp;quot;)&lt;br /&gt;
			$i_CurrentDepth = @extended&lt;br /&gt;
			$i_CurrentDepth = $i_CurrentDepth - 1&lt;br /&gt;
&lt;br /&gt;
			; Schritt 2: Wenn die Tiefe die maximale Tiefe überschreitet schneiden wir den Rest ab.&lt;br /&gt;
			If $i_CurrentDepth &amp;gt; $i_MaxDepth Then&lt;br /&gt;
				$sTempLine = StringLeft($sTempLine, StringInStr($sTempLine, &amp;quot;\&amp;quot;, 0, ($i_MaxDepth + 1)))&lt;br /&gt;
			EndIf&lt;br /&gt;
&lt;br /&gt;
			; Schritt 3: Nun prüfen wir ob wir mit dem vorherigen Schlüssel übereinstimmen. Falls Nein legen wir im Array einen neuen Zähler an.&lt;br /&gt;
			If $sTempLine &amp;lt;&amp;gt; $s_LastKey Then&lt;br /&gt;
				$s_LastKey = $sTempLine&lt;br /&gt;
				; Stimmt nicht überein, wir legen einen neuen Zähler im Array an&lt;br /&gt;
				$a_JPUserDAT[0][0] = $a_JPUserDAT[0][0] + 1&lt;br /&gt;
				Redim $a_JPUserDAT[ $a_JPUserDAT[0][0] + 1 ][7]&lt;br /&gt;
				; Neuen Zähler mit Werten füllen&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][1] = $sTempLine&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][2] = 0&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][3] = (StringLen($sBackupTempline) * 2 ) ; Unicode! 2 Byte pro Zeichen!&lt;br /&gt;
				$i_TotalSize = $i_TotalSize + (StringLen($sBackupTempline) * 2 )&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][4] = 0&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][5] = 0&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][6] = 1&lt;br /&gt;
			Else&lt;br /&gt;
				; Der (ggf. gekürzte) Keyname stimmt mit dem vorherigen Keynamen überein&lt;br /&gt;
				; Wir müssen nichts tun! Die nachfolgenden Werte sollen einfach in der verherigen mit einfließen.&lt;br /&gt;
				; Den Schlüssel selbst rechnen wir aber zu der Menge hinzu, Kleinvieh macht auch Mist!&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][3] = $a_JPUserDAT[ $a_JPUserDAT[0][0] ][3] + (StringLen($sBackupTempline) * 2 ) ; Unicode! 2 Byte pro Zeichen!&lt;br /&gt;
				$i_TotalSize = $i_TotalSize + (StringLen($sBackupTempline) * 2 )&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][6] = $a_JPUserDAT[ $a_JPUserDAT[0][0] ][6] + 1&lt;br /&gt;
			EndIf&lt;br /&gt;
		Else&lt;br /&gt;
			; Kein neuer Schlüssel, ergo muss es ein Wert sein.&lt;br /&gt;
			; Aber bitte nur wenn wir schon mindestens einen Zähler haben!&lt;br /&gt;
			If $a_JPUserDAT[0][0] &amp;gt; 0 Then&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][2] = $a_JPUserDAT[ $a_JPUserDAT[0][0] ][2] + 1&lt;br /&gt;
				$i_TotalValues = $i_TotalValues + 1&lt;br /&gt;
				$a_JPUserDAT[ $a_JPUserDAT[0][0] ][3] = $a_JPUserDAT[ $a_JPUserDAT[0][0] ][3] + (StringLen($sTempLine) * 2)&lt;br /&gt;
				$i_TotalSize = $i_TotalSize + (StringLen($sBackupTempline) * 2 )&lt;br /&gt;
			EndIf&lt;br /&gt;
		EndIf&lt;br /&gt;
		; Nachster Abschnitt ist nur Fortschrittsanzeige&lt;br /&gt;
		If $b_NoProgress = False Then&lt;br /&gt;
			$iLineCounter = $iLineCounter + 1&lt;br /&gt;
			If $iLineCounter &amp;gt; 99 Then&lt;br /&gt;
				ConsoleWrite(&amp;quot;.&amp;quot;)&lt;br /&gt;
				$iLineCounter = 0&lt;br /&gt;
			EndIf&lt;br /&gt;
		EndIf&lt;br /&gt;
	Else&lt;br /&gt;
		; Dateiende erreicht, raus aus der Schleife!&lt;br /&gt;
		ExitLoop&lt;br /&gt;
	EndIf&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
FileClose($hSourceFile)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Zusammenfassung!&lt;br /&gt;
ConsoleWrite(&amp;quot; fertig! Berechne Statistiken.&amp;quot; &amp;amp; @CRLF &amp;amp; @CRLF)&lt;br /&gt;
; [x][1] = Name des Schlüssels&lt;br /&gt;
; [x][2] = Anzahl der Werte unter diesem Schlüssel&lt;br /&gt;
; [x][3] = Größe der Werte unter diesem Schlüssel&lt;br /&gt;
; [x][4] = Anteil Anzahl an Gesamt (Prozent)&lt;br /&gt;
; [x][5] = Anteil Größe an Gesamt (Prozent)&lt;br /&gt;
; [x][6] = Anzahl an Schlüsseln in diesem Schlüsselzweig&lt;br /&gt;
&lt;br /&gt;
For $i = 1 To $a_JPUserDAT[0][0]&lt;br /&gt;
	$a_JPUserDAT[$i][4] = Round($a_JPUserDAT[$i][2] / $i_TotalValues * 100, 2)&lt;br /&gt;
	$a_JPUserDAT[$i][5] = Round($a_JPUserDAT[$i][3] / $i_TotalSize * 100, 2)&lt;br /&gt;
	If $a_JPUserDAT[$i][4] &amp;gt; $i_ShowValuesOver Or $a_JPUserDAT[$i][5] &amp;gt; $i_ShowValuesOver Then&lt;br /&gt;
		ConsoleWrite(_ANSI2OEM($a_JPUserDAT[$i][1] &amp;amp; @CRLF))&lt;br /&gt;
		ConsoleWrite(_ANSI2OEM(&amp;quot;Anzahl Schlüssel .......: &amp;quot; &amp;amp; _AddThousandDotNEU($a_JPUserDAT[$i][6]) &amp;amp; @CRLF))&lt;br /&gt;
		ConsoleWrite(&amp;quot;Anzahl Werte ...........: &amp;quot; &amp;amp; _AddThousandDotNEU($a_JPUserDAT[$i][2]) &amp;amp; @CRLF)&lt;br /&gt;
		ConsoleWrite(&amp;quot;Volumen ................: &amp;quot; &amp;amp; _ByteSuffix($a_JPUserDAT[$i][3]) &amp;amp; @CRLF)&lt;br /&gt;
		ConsoleWrite(&amp;quot;Anteil Anzahl an Gesamt : &amp;quot; &amp;amp; $a_JPUserDAT[$i][4] &amp;amp; &amp;quot;%&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
		ConsoleWrite(&amp;quot;Anteil Volumen an Gesamt: &amp;quot; &amp;amp; $a_JPUserDAT[$i][5] &amp;amp; &amp;quot;%&amp;quot; &amp;amp; @CRLF &amp;amp; @CRLF)&lt;br /&gt;
	EndIf&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
ConsoleWrite(_ANSI2OEM(&amp;quot;Schlüssel Gesamt : &amp;quot; &amp;amp; _AddThousandDotNEU($i_TotalKeys) &amp;amp; @CRLF))&lt;br /&gt;
ConsoleWrite(&amp;quot;Werte Gesamt ....: &amp;quot; &amp;amp; _AddThousandDotNEU($i_TotalValues) &amp;amp; @CRLF)&lt;br /&gt;
ConsoleWrite(&amp;quot;Volumen Gesamt ..: &amp;quot; &amp;amp; _ByteSuffix($i_TotalSize) &amp;amp; @CRLF)&lt;br /&gt;
ConsoleWrite(@CRLF)&lt;br /&gt;
&lt;br /&gt;
ConsoleWrite(_ANSI2OEM(&amp;quot;Es wurden nur Werte über &amp;quot; &amp;amp; $i_ShowValuesOver &amp;amp; &amp;quot;% angezeigt&amp;quot; &amp;amp; @CRLF))&lt;br /&gt;
ConsoleWrite(@CRLF)&lt;br /&gt;
&lt;br /&gt;
$iTimerend = TimerDiff($iTimerstart) / 1000&lt;br /&gt;
ConsoleWrite(&amp;quot;Fertig, Laufzeit &amp;quot; &amp;amp; StringRegExpReplace($iTimerend,&amp;quot;(\d*)\.(\d{2})(\d*)&amp;quot;,&amp;quot;$1,$2&amp;quot;) &amp;amp; &amp;quot; sec&amp;quot; &amp;amp; @CRLF &amp;amp; @CRLF)&lt;br /&gt;
Exit 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
==Kommentare==&lt;br /&gt;
&amp;lt;comments /&amp;gt;&lt;/div&gt;</summary>
		<author><name>BLinz</name></author>
	</entry>
</feed>