PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Textzeilen Permutation / VB.Net



br00_pwn
22.06.2009, 18:31
heyho zusammen,

möchte ne permutation aus mehreren txt dateien machen, sprich die zeilen kombinieren. hat da jemand vielleicht nen beispielcode, weiss nicht genau wie ich vorgehen soll.

danke im vorraus..:D

Sawyer
22.06.2009, 19:06
Sub Main()
Dim Pfad As String = Environment.GetFolderPath(Environment.SpecialFolde r.Desktop)
Dim Datei1 As String = Pfad & "\Text1.txt", Datei2 As String = Pfad & "\text2.txt"

Dim sw As New System.IO.StreamWriter(Pfad & "\NeueDatei.txt")
sw.Write(DateiLesen(Datei1))
sw.Write(ControlChars.CrLf)
sw.Write(DateiLesen(Datei2))
sw.Flush()
sw.Close()
End Sub

Private Function DateiLesen(ByVal DateiPfad As String) As String
Dim sr As New System.IO.StreamReader(DateiPfad)
Dim Daten As String = sr.ReadToEnd()
sr.Close()

Return Daten
End FunctionHab mal auf Basis dessen was ich aus der Frage interpretiert habe , mal eine kleine Funktion mit Aufrufbeispiel geschrieben , allerdings wusste ich nicht ob das ganze dynamisch sein soll , aber ich hoffe es ist das was du dir vorgestellt hast.

MfG

br00_pwn
22.06.2009, 19:13
super klasse das hilft mir aber mal 100% weiter...

mein gedanke lag darin, ich habe 4 txt datein, jeweils mit 20 wörtern, jedes wort in einer eigenen zeile..dann möchte ich jegliche möglichkeit bestimmen und diese wiederrum in einer txt speichern...
also die 4 wörter aus den vier verschiedenen txtdatein ..zusammen als string speichern und dann wieder in eine txt schreiben...sprich alle möglichkeiten..

edit: naja nicht umbedingt 20 wörter, sagen wir unbegrenzt wörter..

inmate
22.06.2009, 19:26
:confused:

meinse so ?


Dim sreader = New StreamReader("C:\bla.txt").ReadToEnd
Dim sreader2 = New StreamReader("C:\xxx.txt").ReadToEnd
Dim sreader3 = New StreamReader("C:\LOL.txt").ReadToEnd
Dim sreader4 = New StreamReader("C:\blubb.txt").ReadToEnd

Dim swriter As New StreamWriter("C:\x.txt")
swriter.Write(sreader & vbCrLf)

swriter.Write(sreader2 & vbCrLf)
swriter.Write(sreader3 & vbCrLf)
swriter.Write(sreader4)
swriter.Close()

dieser code liest 4 textdateien aus und packt ihre inhalte in eine.

br00_pwn
22.06.2009, 19:32
nein...ok stell dir vor du hast 2 textdateien...in der einen stehen vornamen und in der anderen nachnamen, jetzt möchte du alle möglichkeiten herausfinden, wie man diese zusammenfügen kann...

txt1 ----------- txt2

susanne ------ wagner
peter----------- meier
werner--------- schneder
... ...

jetzt halt jegliche möglichkeit herausfinden
wernermeier,wernerschneider, wernerwagner, peterschneider, peterwagner...usw

Sawyer
22.06.2009, 19:36
Und wie willst du deinem Programm bitte beibringen , Namen und vornahmen zu unterscheiden ?

Das ginge nur wenn Zeichen zwischen den Namen vorhanden wären , oder wenn du jedes Wort auslesen lässt , und Zeichen für Zeichen durchgehst , und prüfst ob sich daraus bereits ein Name oder vornahme bilden lässt

Dann müsste allerdings eine Datenbank mit möglichst vielen Namen und Vornahmen vorhanden sein
Zumindest fällt mir das gerade ein zur lösung dieses Problems

MfG

br00_pwn
22.06.2009, 19:39
nein vornamen befinden sich in txt1 und nachnamen in txt2...also ich beziehe aus 2textdatein...also immer eine zeile ein "wort"
sprich... zeile1(txt1) + zeile1(txt2)
............zeile1(txt1) + zeile2(txt2)
............usw...


mom ich mach eben mal ein bild in ps..um es deutlich zu zeigen, was ich vorhab..

inout
22.06.2009, 19:58
Meinst du sowas?


Dim sr1 As new streamreader("file1")
Dim sr2 As New StreamReader("file2")
Dim s() As String = split(sr1.ReadToEnd,vbcrlf)
Dim t() As String = split(sr2.ReadToEnd,vbcrlf)
sr1.Close()
sr2.Close()
For Each u As String In s
For Each v As String In t
Messagebox.Show(u+" "+v)
Next
Next

[ungetestet und nur geeignet für eher kleine Dateien, da die Dateien komplett in den Speicher geschrieben werden. Ansonsten mit ReadLine() arbeiten.]


Die Ausgabe wieder in eine Datei zu schreiben bekommst du denke ich mal selber hin. ;)

IRET
22.06.2009, 20:07
Lade eine Datei und splitte sie in Arrays und dann mit der nächsten usw.
und dann musst sie ja nur mehr zusammen setzen.
am besten mit for each ;)

Hoffe das is eine gute Idee^^

br00_pwn
22.06.2009, 20:10
also hier mal ein bild wie ich es mir denke...
http://www.bilder-space.de/show.php?file=22.06COIQukAar8oiNDl.jpg

also werden 4 txt dateien benötigt, in denen jeweils das passende steht..
nun sollen alle möglichkeiten aus den 4 txt herausgefunden werden, sprich kommt immer eine mail addy raus...diese wird dann anschliessend auf gültigkeit getestet und weiterverarbeitet :) also bedeutet es...wenn txt1 1000 vornamen hat, txt2 4 sonderzeichen , txt3 1000 nachnamen und txt4 10 mailanbieter...dann sollte das programm über 2 millionen email addy ausspucken :) so ist mein gedanke...diese werden sicherlich dann auf gültigkeit getestet, über smtp versand... und die kombination aus vorname .-_nachname@irgendwas.?? gibts fast alle;)

EBFE
22.06.2009, 20:23
Muss es VB sein (willst du es programmieren oder halt nur ein Ergebnis? Sonst könnte ich schnell ein Skript schreiben ;) )
Um das nochmal genau nachzufragen: du willst also nur:
vorname+nachname@mail
und keine
nachname+vorname@mail kombos?

br00_pwn
22.06.2009, 20:24
hm...müsste dann theoratisch ja nur die txt tauschen...;) aber sicherlich wäre es schon besser das es dies automatisch macht ?
in was "könnstest" du es denn coden, fragen wir mal so ...oder haste sowas schon ?

EBFE
22.06.2009, 20:50
In WLML, die Sprache eignet sich perfekt dafür (es soll zwar ursprünglich Passwordliste generieren, kann aber auch für jegliche Kombobildung genutzt werden ;) )
http://free-hack.com/showthread.php?t=41008
da du es ja nicht lernen musst, reicht es, den Interpereter herunterzuladen und zu starten (start.bat) ;).

WLML Script (einfach in eine TXT Datei im WLML Ordner kopieren (wo schon die ganzen Beispiele stehen) und zu WLML umbenennen) :


define nachnamen= file "namen.txt"
define vornamen= file "vornamen.txt"
define szeichen=".+-_"
define mailer= file "mailer.txt"
password=vornamen+szeichen+nachnamen+'@'+mailer

oder in kurz:


define szeichen=".+-_"
password=file 'vornamen.txt'+file 'namen.txt'+szeichen+'@'+file 'mailer.txt'

dann per "compile 'myscript.wlml' " compilieren und per "genlist 'listname.txt'" die Liste generieren.

Getestet mit:


Namen:
meier
geier
schulz
niemand

Vornamen:
dieter
detlef
jana

mailer:
web.de
freenet.de
hotmail.com

müsste also 4(Namen)*3(Vornamne)*3(mailer)*4(Sonderzeichen)= 144 Möglichkeiten ergeben


Ausgabe:


|: compile "mailaddis.wlml"
|: test
dieter.meier@web.de
dieter.meier@freenet.de
dieter.meier@hotmail.com
dieter.geier@web.de
dieter.geier@freenet.de
|: genlist "mail.text"
144 Woerter generiert
benötigte Zeit: 0.00 S

br00_pwn
22.06.2009, 21:03
super klasse, erheblich kürzer als ich es mir dachte :)
vielen vielen dank :)

Sirect
22.06.2009, 21:37
Ist doch ganz einfach.

Vornamen: Nachnahmen:
1 3
2 4
3 5


Jetzt musst du jeden Einrag in Zeile 1 mit jedem aus der 2 Kombinieren und Aufschreiben, dann haste alle Kombis.

For each... ;)

EBFE
22.06.2009, 21:45
erheblich kürzer
Naja, dafür ist die Performance unter aller Sau.
Testweise mit den von dir angegebenen Werten laufen lassen (900 Namen,800 Vornamen,10 mailer,4 Sonderzeichen) -
28 868 040 Woerter generiert
benötigte Zeit: 1570.13 Sekunden
(ist aber auch fast 800MB große Liste - und das auf einem alten Laptop im Hintergrundmodus :))
bei 1000der Werten sind es sowieso 40 Mio Adressen - wird also ~50 Minuten dauern. Allerdings spart man sich wiedrum die Programmier&Testzeit für ein "richtiges" Programm :)

Dardan
25.06.2009, 14:09
Naja, die Frage wurde ja eigendlich schon geklärt aber hier nochmal den vb.net Code:

Public Sub Permutation()
Dim Datei1 As Array = IO.File.ReadAllLines("C:\Datei1.txt")
Dim Datei2 As Array = IO.File.ReadAllLines("C:\Datei2.txt")
Dim Datei3 As Array = IO.File.ReadAllLines("C:\Datei3.txt")
Dim Datei4 As Array = IO.File.ReadAllLines("C:\Datei4.txt")
Dim Ergebnis(Datei1.Length - 1) As String

For i As Integer = 0 To Datei1.Length - 1
Ergebnis(i) = Datei1(i) & Datei2(i) & Datei3(i) & Datei4(i)
Next

IO.File.WriteAllLines("C:\Alles.txt", Ergebnis)
End Sub

Diese Sub einfügen und dann per Button oder so aufrufen.
Hab es getestet und es hat geklappt.
lg Ich

EBFE
25.06.2009, 17:19
@Dordan: dein Code erstellt aber keine Permutation ;). Sondern fügt einfach die eingelesenen Wörter zusammen.
Wenn man also:
Namen:
meier
schulz

und Vornamen:
dieter
detlef

hat, steht in der "Alles.txt" nur
dietermeier
detlefschulz

gefragt sind aber:
dietermeier
dieterschult
detlefmeier
detlefschult
(bei mehreren Textdateien entsprechend auch mehr Kombos) ;)

Dardan
26.06.2009, 07:35
Achsooo meint er das :o
Sorry...
Ich habe die Frage falsch verstanden :/ *schäm*
lg Ich