Vollständige Version anzeigen : [.NET] Scan Result Filter


Silentuser
04.11.2010, 18:48

Filtert Scan Results aus einer Txt Datei nach Up und Downloadspeed.

Programmiersprache: VB~Net
Framework: 3;5
Läuft auf 64bit und 32bit

Man hat die Möglichkeit ein Minimum für dl und uploadspeed einzutragen. d;h. es werden alle Server welche einen geringeren Speed erreicht haben raus genommen und der Rest in eine neue txt Datei geschrieben.


Die Source Datei muss so ein Format haben (weiß leider nicht mit welchen Scanner das gemacht wurde)

;;0;xup~in/exec/ximg;php?fid=65358554
{img-src: ;img526;imageshack~us/img526/4126/outyo;jpg}


Hier die Oberfläche vom Programm:

{bild-down: ;img525;imageshack~us/img525/3577/resultey;jpg}



Ich geh hier nur auf die wichtigsten Teile vom Quellcode ein, das Komplette Projekt kann dann unten als ;zip runtergeladen werden.

Wie gesagt, ich bin noch Anfänger deswegen hab ich das Programm damit geschrieben was ich bereits kann, an einigen stellen ist es bestimmt "umständlicher" oder nicht schön geschrieben, für Verbesserungsvorschläge bin ich daher gerne offen, will ja auch was lernen :)

Nach einigen Error Handlings + Überprüfungen ob als speed bei beiden Feldern nur 0;00 eingegeben wurde (und der Überprüfung ob es davon überhaupt welche gibt) gehts los.

Zuerst lese ich die Zeilen aus der txt Datei in ein List(of String)
Dim Lines As New List(Of String)
ein, dazu habe ich noch die Abfrage ob die Datei mit Decimal stellen oder ohne überprüft werden soll (Die Check box)
Auch Wenns komisch klingt ist die Überprüfung mit Decimal stellen einfacher als die ohne Decimal stellen:

Erst mal die mit:

Public Sub readsource(ByVal withdec As Boolean)


If withdec = True Then


Dim reader As New StreamReader(sourecepath)

Do While reader;EndOfStream = False

Lines;Add(reader;ReadLine())

Loop

reader;Close()
Exit Sub


Eigentlich ganz einfach.

Nachdem alles in die List geschrieben wurde kommt nun die suche nach den Zeilen.
mit Lines;IndexOf("zu Suchender String") kann man das ganze List durchsuchen ob ein Element dem "zu Suchender String" entspricht, als Rückgabewert erhält man dann den Index (für das löschen wichtig).
Das Problem hier ist das IndexOf bei einer List wirklich das komplette Element überprüft und nicht nur Teile davon. D;h. würde wir in der txt Datei nur das letze "s" von "Download: 0;00 KB/s" weglassen würde er es das Element schon nicht mehr finden und -1 zurückgeben.


Nagut hier jetzt aber die suche nach den Zeilen:

Dim dlcount As Integer = 0

Dim dlspeed As Decimal = ToDecimal(TextBox_DlSpeed;Text;Replace(";", ","))
Dim dlspeedtext As String
Label_dlview;Show()

Do While dlspeed >= 0;0

dlspeedtext = dlspeed;ToString
dlspeedtext = dlspeedtext;Replace(",", ";")

Label_dlview;Text = "checking Donwload speed: " & dlspeedtext & " KB/s"
GroupBox1;Refresh()

Do While Not Lines;IndexOf("Download: " & dlspeedtext & " KB/s") = -1

Dim Index As Integer = 0
Index = Lines;IndexOf("Download: " & dlspeedtext & " KB/s")
Lines;RemoveAt(Index)
Lines;RemoveAt(Index - 1)
Lines;RemoveAt(Index - 2)
Lines;RemoveAt(Index - 3)
Lines;RemoveAt(Index - 4)
Lines;RemoveAt(Index - 5)
dlcount = dlcount + 1
Loop


dlspeed = dlspeed - 0;01

Loop

Label_dlview;Text = "DL Speed Check done " & dlcount;ToString & " Servers removed"

Mit dlcount geb ich am Schluss aus wie viele Server gelöscht wurden aufgrund des zu geringen Download speedes.
Mit dlspeed wandel ich die eingabe in Decimal um zähle in der Schleife mit 0;01 Schritten bis 0 runter. Da er für die Umwandlung von String aber eine Komma getrennte zahl will ersetz ich den ";" noch durch ein "," und wandel erst dann um, mit dem Wert kann ich dann runterzählen.
Für den Suchstring brauch ich aber natürlich wieder einen ";" deswegen das ganze nochmal zurück in der Schleife (damit immer der aktuelle wert wieder in den String eingesetzt wird)
Mit Lines;removeAt(Index) enfern ich dann die Zeilen drüber usw. usw. für die meisten sicherlich selbsterklärend.

Das ganze schaut für den Upload natürlich fast genauso aus.

Jetzt noch kurz zu dem fall, das ohne Decimal geprüft werden soll, was ja immerhin am meisten vorkommt.

Wie oben schon angesprochen kann ich nicht einfach mit lines;listof("Download: 0;") nach den Elementen in der List suchen.
Deswegen bin ich einen kleinen Umweg gegangen.
Ich hab eine zweite list(of String) verwendet und schreiben die zeilen gleich alle gekürzt in die List2:


Else


Dim array As New ArrayList()
Dim zeile As String

Dim reader As New StreamReader(sourecepath)


Do While reader;EndOfStream = False
zeile = reader;ReadLine
array;Add(zeile)
Lines;Add(zeile)

Loop


For Each element In array

Dim Text As String
Dim index As Integer

Text = element;ToString()

If Text;IndexOf(";") = -1 Then

lines2;Add(Text)
Else

Text = element;ToString()
index = Text;LastIndexOf(";")
Text = Text;Remove(index + 1)

lines2;Add(Text)


End If

Next


reader;Close()

End If


Ich hätts mir auch einfacher machen können und einfach immer die letzen 7 Zeichen löschen und das dann komplett in die list2 schreiben, aber egal^^

So und jetzt missbrauch ich einfach die list2 um meinen gekürzten String zu überprüfen und lösch das dann immer aus beiden lists raus:


Dim dlcount As Integer = 0
Dim dlspeed As Integer = ToInt16(TextBox_DlSpeed;Text;Remove(TextBox_DlSpeed;Text;IndexOf(";"), 3))
Dim dlspeedtext As String
Label_dlview;Show()

Do While dlspeed >= 0

dlspeedtext = dlspeed;ToString
Label_dlview;Text = "checking Donwload speed: " & dlspeedtext & "~XX KB/s"
GroupBox1;Refresh()

Do While Not lines2;IndexOf("Download: " & dlspeedtext & ";") = -1

Dim Index As Integer = 0
Index = lines2;IndexOf("Download: " & dlspeedtext & ";")

lines2;RemoveAt(Index)
lines2;RemoveAt(Index - 1)
lines2;RemoveAt(Index - 2)
lines2;RemoveAt(Index - 3)
lines2;RemoveAt(Index - 4)
lines2;RemoveAt(Index - 5)

Lines;RemoveAt(Index)
Lines;RemoveAt(Index - 1)
Lines;RemoveAt(Index - 2)
Lines;RemoveAt(Index - 3)
Lines;RemoveAt(Index - 4)
Lines;RemoveAt(Index - 5)


dlcount = dlcount + 1
Loop


dlspeed = dlspeed - 1

Loop

Label_dlview;Text = "DL Speed Check done " & dlcount;ToString & " Servers removed"


Auch hier wieder die Umwandlung, aber diesmal werden die letzen 3 Zeichen abgeschnitten und der String in Int16 konvertiert. Der Rest ist dann selbsterklärend.

Und am schluss werden die Elemente dann in eine neue ;txt geschrieben:


Dim writer As New StreamWriter(targetfile, overwrite)

Try


For Each Zeile As String In Lines


writer;WriteLine(Zeile)


Next

writer;WriteLine(vbNewLine)
writer;WriteLine("-----------------------------------------")
writer;WriteLine("Filterd by Scan Result Filter Vers. " & Me;ProductVersion & " // file creation date: " & DateTime;Now;ToString)
writer;Close()
MsgBox("Success!" & vbNewLine & targetfile & " created")

Catch ex As Exception

MsgBox("Error:" & ex;ToString)


End Try

Button2;Enabled = True


Hier könnte man noch einen Counter und eine Abfrage einbauen, damit man die Leerzeilen zwischen den Servern rausfiltert.

Naja jetzt ist es schon fast ein Tut geworden aber wat solls^^

Hier das Projekt (Visual Basic 2010), wär nett wenns in Blog eingetragen wird

Download Src:

No File | ;;xup~in (;;;xup~in/dl,14252988/Result_Filter;zip/)

Falls es derweil jemand fertig Kompeliert haben will, bei pn bei mir melden.

Für Ideen, Bugs oder ähnliches bitte hier posten.

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Alex²
04.11.2010, 18:59

Es ist verboten hier Binaries zu posten, du darfst nur den Source posten!


terraNova
04.11.2010, 19:32

Naja, sonderlich spannend ist das Programm nicht. Im Grunde sinds nur Min-Max Verifizierungen und per RegExp geparste Infos, daher verstehe ich nicht, dass Du Code vorenthälst.

Beim KSnoop ist übrigends ein Resultfilter inklusive (0;16b)


Silentuser
05.11.2010, 19:18

Edit: Hoppala, dann werd ich den Code Posten Source eingetragen

evtl. wirds ja geprüft und die binary erlaubt bzw. in den blog eingetragen, so das auch user was davon haben die kein visual Studio auf dem pc haben

Naja, sonderlich spannend ist das Programm nicht. Im Grunde sinds nur Min-Max Verifizierungen und per RegExp geparste Infos, daher verstehe ich nicht, dass Du Code vorenthälst.

Beim KSnoop ist übrigends ein Resultfilter inklusive (0;16b)



Keins von beiden, da ich mich mit RegEx noch nicht beschäftigt habe ich das ganze mit IndexOf gemacht.
Im Grunde wandel ich die Eingabe in Int bzw. Deciaml um und überprüfe mit einem Do While die Zeilen auf ein vorkommen, dabei zähl ich bis 0 runter. aber mehr dazu dann im code. Ich programmier noch nicht lange und würde mich auch noch als Anfägner zählen deswegen habe ich dafür auch ein paar Stunden gebraucht.

Kann sein das dass KSnoop mit drin hat, hab das Prog. auf Anforderung geschrieben.


Ähnliche Themen zu [.NET] Scan Result Filter
  • PUB result
    hi leute habe mal wieder einige pubs gescannt und bei einen stand das hier DIR: /upload/ DELETE STATS: nondeletable RUNNING OS: UNIX Type: L8 Server: "WarFTPd 1;82;00-RC11" OS: "WIN32 (Windows ~NET Server 2003 5;2 3790 x86 2-CPU)" RESUMABLE: Yes FXP STATS: FXPable was [...]

  • Scan 1000, Scan 500 , Hiddenrun.exe = Virus ?
    Diese Programme werden von Antivir als Trojanger bzw. Virus erkannt. Ist das normal oder sind die Dateien irgendwie schlecht (-: [...]

  • Scan 500, Scan 1000, SFind, DFind - andere Scanner ohne GUI?
    Gibt es noch andere Scanner ohne GUI außer Scan 500, Scan 1000, SFind und DFind? [...]

  • x-scan result auswerten -.-
    folgendes prob ich versteh nich was bei den results verwendbar und was nich is ?( da meistens das gleiche drin steht hab das gefühl das ich irgendwas falsch mache nur ich weiss nich was ... darum brauche ich euere hilfe ;) wenn ihr weitere infos braucht dann postet sie vent [...]



raid-rush.ws | Imprint & Contact pr