| |
Visual-Basic EinsteigerZeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 17:49 |
| hallo,
habe eine input.txt die so aufgebaut ist
1 , 4 , 5 , 8 , 19 , 40
1 , 4 , 5 , 8 , 24 , 40
1 , 4 , 5 , 8 , 38 , 40
1 , 4 , 5 , 8 , 40 , 46
1 , 4 , 5 , 19 , 24 , 40
1 , 4 , 5 , 19 , 38 , 40
1 , 4 , 5 , 19 , 40 , 46
1 , 4 , 5 , 24 , 38 , 40
1 , 4 , 5 , 24 , 40 , 46
1 , 4 , 5 , 38 , 40 , 46
1 , 4 , 7 , 8 , 19 , 21
In eine output.txt sollen die Kombinationen die 5 Zahlen gleich haben.
Also vergleiche
1.Zeile 1 , 4 , 5 , 8 , 19 , 40 mit allen anderen Zeilen in der Datei - wenn 5 Zahlen gleich sind
dann schreibe die 5 Zahlen die auch in einer anderen Zeile vorkommen in eine output Datei.
Danach nehme die 2. Zeile 1 , 4 , 5 , 8 , 24 , 40 und vergleiche mit allen weiteren Zeilen darunter
usw. usw.
Könnte mir jemand helfen?
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 18:15 |
| Hallo!
Die Fragestellung ist nicht klar.
Weshalb Kombinationen?
Die Zahlenreihen innerhalb der Zeilen sind offenbar bereits nach der Größe geordnet.
Geht es nur darum, die Zeilen zu ermitteln, die mehr als
einmal in der Datei vorkommen?
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 18:27 |
| hallo Manfred,
ja so könnte Mann/Frau es auch sagen.
"Geht es nur darum, die Zeilen zu ermitteln, die mehr als
einmal in der Datei vorkommen? "
Ja - aber in jeder Zeile stehen ja 6 Zahlen - es sollen aber
schon ab 5 gleichen Zahlen - diese 5 Zahlen in die output.txt
geschrieben werden.
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 19:06 |
| Nur sehr grob getestet ....
Voraussetzung: Jede Zahl erscheint pro Zeile nur einmal
Ich verstehe aber nicht ganz, was genau weg geschrieben werden soll.
Hier wird die jeweils 2. Zeile, die identisch (5 Zahlen) mit einer
davor ist, geschrieben.
Wenn Du nur jeweils 5 Zahlen bei Gleichheit notierst,
gibt es im Output keine Verbindung zu den zugrundeliegenden Zeilen
im Input und die Zahlen-Reihen können sich mehrfach wiederholen.
Was ist der Sinn der Sache??
Option Explicit
Private Sub Form_Load()
Dim file As String
file = "C:\daten\input.txt"
Dim lines() As String
lines = GetLines(file)
Dim erledigt() As Boolean
ReDim erledigt(UBound(lines))
'Doppelschleife über die Zeilen
Dim i As Integer, k As Integer
Dim line1() As Integer, line2() As Integer
For i = 1 To UBound(lines)
line1 = GetLine(lines(i))
If Not erledigt(i) Then
For k = i + 1 To UBound(lines)
If Not erledigt(k) Then
line2 = GetLine(lines(k))
erledigt(k) = CompareLines(line1, line2)
End If
Next k
End If
Next i
'Zeilen schreiben
k = FreeFile
Open "C:\daten\output.txt" For Output As #k
For i = 1 To UBound(lines)
If erledigt(i) Then
Write #k, lines(i)
End If
Next i
Close #k
End Sub
Private Function CountLines(ByVal file As String) As Integer
'Zahl der Zeilen in der Datei
Dim k As Integer, z As Integer, line As String
k = FreeFile
Open file For Input As #k
While Not EOF(k)
Line Input #1, line
z = z + 1
Wend
Close #k
CountLines = z
End Function
Private Function GetLines(ByVal file As String) As String()
'Zeilen in ein Array eintragen
Dim l As Integer
l = CountLines(file)
Dim lines() As String
ReDim lines(l) As String
Dim k As Integer, z As Integer
k = FreeFile
Open file For Input As #k
z = 1
While Not EOF(k)
Line Input #1, lines(z)
z = z + 1
Wend
Close #k
GetLines = lines
End Function
Private Function GetLine(line As String) As Integer()
'ZeilenString in ein Integer-Array eintragen
Dim parts() As String
parts = Split(line, ",")
Dim ints() As Integer
ReDim ints(UBound(parts)) As Integer
Dim i As Integer
For i = 0 To UBound(parts)
ints(i) = CInt(parts(i))
Next i
GetLine = ints
End Function
Private Function CompareLines(line1() As Integer, _
line2() As Integer) As Boolean
'Werte in zwei Zeilen vergleichen / Anzahl Übereinstimmungen
Dim i As Integer, k As Integer, id As Integer
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then id = id + 1
Next k
Next i
CompareLines = id > 4
End Function
Beitrag wurde zuletzt am 06.03.14 um 19:18:29 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 19:36 |
| hallo nochmals,
oh ... soviel VB-Code für die Funktion
Also ich habe mir das geschrieben (Bitte nicht lachen ...
Werden zwar 6 Zahlen in die output.txt geschrieben (5 Zahlen sind jedoch gleich)
Aber irgendwie werden doch nicht alle verglichen - habe den Fehler noch nicht gefunden !!!
Dim r1 As Byte
Dim r2 As Byte
Dim r3 As Byte
Dim r4 As Byte
Dim r5 As Byte
Dim r6 As Byte
Dim r7 As Byte
Dim r8 As Byte
Dim r9 As Byte
Dim r10 As Byte
Dim r11 As Byte
Dim r12 As Byte
'öffne ausgabedatei
Open "C:\daten\output.txt" For Output As #1
'öffne eingabedatei
Open "C:\daten\input.txt" For Input As #43
'lese nur einmal 1. und 2. zeile
Input #43, r1, r2, r3, r4, r5, r6
Input #43, r7, r8, r9, r10, r11, r12
GoTo sp2
sp1:
'es wird jetzt nur noch jeweils eine zeile gelesen und zwar r7 bis r12!
'die letzte gelesene zeile wird nach r1 bis r6 gerettet (also nach oben
' geschoben)
r1 = r7
r2 = r8
r3 = r9
r4 = r10
r5 = r11
r6 = r12
'nun kann die zeile gelesen werden
Input #43, r7, r8, r9, r10, r11, r12
sp2:
flag1 = 0
If r1 = r7 Or r1 = r8 Or r1 = r9 Or r1 = r10 Or r1 = r11 Or r1 = r12 Then flag1 _
= flag1 + 1
If r2 = r7 Or r2 = r8 Or r2 = r9 Or r2 = r10 Or r2 = r11 Or r2 = r12 Then flag1 _
= flag1 + 1
If r3 = r7 Or r3 = r8 Or r3 = r9 Or r3 = r10 Or r3 = r11 Or r3 = r12 Then flag1 _
= flag1 + 1
If r4 = r7 Or r4 = r8 Or r4 = r9 Or r4 = r10 Or r4 = r11 Or r4 = r12 Then flag1 _
= flag1 + 1
If r5 = r7 Or r5 = r8 Or r5 = r9 Or r5 = r10 Or r5 = r11 Or r5 = r12 Then flag1 _
= flag1 + 1
If r6 = r7 Or r6 = r8 Or r6 = r9 Or r6 = r10 Or r6 = r11 Or r6 = r12 Then flag1 _
= flag1 + 1
If flag1 = 5 Then Print #1, r7; ","; r8; ","; r9; ","; r10; ","; r11; ","; r12
If EOF(43) = False Then GoTo sp1
Close #43
Close #1 Es soll so ablaufen.
Lese erste Zeile (input.txt)
vergleiche diese Zeile mit allen anderen Zeilen darunter in dieser Datei
wenn 5 Zahlen in einer anderen Zeile gleich sind dann schreibe diese
5 Zahlen in die output Datei.
Dann lese zweite Zeile (input.txt)
vergleiche diese Zeile mit allen anderen Zeilen darunter in dieser Datei
wenn 5 Zahlen in einer anderen Zeile gleich sind dann schreibe diese
5 Zahlen in die output Datei.
Dann lese dritte Zeile (input.txt)
.
.
.
usw. bis Dateiende
Die letzte Zeile aus der (input.txt) kann ja nicht mehr verglichen werden
da Dateiende und keine weitere Zeile mehr folgt.
Verstanden ?
1 , 4 , 5 , 8 , 19 , 40
1 , 4 , 5 , 8 , 24 , 40
Hier würde
1,4,5,8,40
in die output.txt geschrieben - da 5 Zahlen gleich sind
Warum mein VB-Code nicht das macht was ich will - ????????
Keine Ahnung ....
LG
Angelina
Beitrag wurde zuletzt am 06.03.14 um 19:39:31 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 19:45 |
| Na, dann so ...
FillOutput benötigt Funktionen von oben ....
Private Function CompareLines2(line1() As Integer, _
line2() As Integer) As String
CompareLines2 = ""
Dim i As Integer, k As Integer, id As Integer
Dim lineout As String
If CompareLines(line1, line2) Then
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then _
lineout = lineout & CStr(line1(i)) & ", "
Next k
Next i
If Len(lineout) > 2 Then
lineout = Left(lineout, Len(lineout) - 2)
End If
CompareLines2 = lineout
End If
End Function
Private Sub FillOutput()
Dim file As String
file = "C:\daten\input.txt"
Dim lines() As String
lines = GetLines(file)
Dim ak As Integer
ak = FreeFile
Open "C:\daten\output.txt" For Output As #ak
Dim i As Integer, k As Integer
Dim line1() As Integer, line2() As Integer
Dim lineout As String
For i = 1 To UBound(lines)
line1 = GetLine(lines(i))
For k = i + 1 To UBound(lines)
line2 = GetLine(lines(k))
lineout = CompareLines2(line1, line2)
If Not lineout = "" Then
Write #ak, lineout
'Eventuell hier Exit ????
End If
Next k
Next i
Close #ak
End Sub
Beitrag wurde zuletzt am 06.03.14 um 19:46:51 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 20:01 |
| hallo Manfred,
vorab besten Dank
kann ich die
Private Sub FillOutput()
mit einem Call aufrufen - es werden verschiedene Sub durch ein Call aufgerufen und danach
soll deine
Private Sub FillOutput()
aufgerufen werden ...
wie mache ich das ???
Call Anfang
Call Ende
Call FillOutput()
oder ???
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 20:18 |
| Nein!
Füge die beiden geposteten Codeabschnitte zusammen und rufe nur "FillOutput".
(Die anderen Routinen werden intern gerufen.)
Den Pfad zu den Dateien für Input/OutPut mußt Du anpassen.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 20:35 |
| Manfred
so gedacht???
Call FillOutput
Private Sub FillOutput()
CompareLines2(line1() As Integer, _
line2() As Integer) As String
CompareLines2 = ""
Dim i As Integer, k As Integer, id As Integer
Dim lineout As String
If CompareLines(Line1, line2) Then
For i = 0 To UBound(Line1)
For k = 0 To UBound(line2)
If Line1(i) = line2(k) Then _
lineout = lineout & CStr(Line1(i)) & ", "
Next k
Next i
If Len(lineout) > 2 Then
lineout = Left(lineout, Len(lineout) - 2)
End If
CompareLines2 = lineout
End If
Dim file As String
file = "C:\daten\input.txt"
Dim lines() As String
lines = GetLines(file)
Dim ak As Integer
ak = FreeFile
Open "C:\daten\output.txt" For Output As #ak
Dim i As Integer, k As Integer
Dim Line1() As Integer, line2() As Integer
Dim lineout As String
For i = 1 To UBound(lines)
Line1 = GetLine(lines(i))
For k = i + 1 To UBound(lines)
line2 = GetLine(lines(k))
lineout = CompareLines2(Line1, line2)
If Not lineout = "" Then
Write #ak, lineout
'Eventuell hier Exit ????
End If
Next k
Next i
Close #ak
End Sub | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 20:55 |
| Hier noch ein wenig kommentiert.
(Das ginge auch etwas einfacher, aber der Code soll die
einzelnen Schritte und Teilaufgaben deutlich machen ....)
Option Explicit
Private Sub Form_Load()
'Der Aufruf der Routine
FillOutput
End Sub
Private Function CountLines(ByVal file As String) As Integer
'Diese Funktion zählt die Zahl der Zeilen in der Datei
Dim k As Integer, z As Integer, line As String
k = FreeFile
Open file For Input As #k
While Not EOF(k)
Line Input #k, line
z = z + 1
Wend
Close #k
CountLines = z
End Function
Private Function GetLines(ByVal file As String) As String()
'Diese Funktion lädt die Zeilen in einer Datei in ein StringArray
Dim l As Integer
l = CountLines(file) 'Zahl der Zeilen bestimmen
Dim lines() As String
ReDim lines(l) As String
Dim k As Integer, z As Integer
k = FreeFile
Open file For Input As #k
z = 1
While Not EOF(k)
Line Input #k, lines(z)
z = z + 1
Wend
Close #k
GetLines = lines
End Function
Private Function GetLine(line As String) As Integer()
'Dies Funktion zerlegt eine Dateizeile (String) anhand des
'Feldtrennzeichens , in ein Array von Integern
Dim parts() As String
parts = Split(line, ",")
Dim ints() As Integer
ReDim ints(UBound(parts)) As Integer
Dim i As Integer
For i = 0 To UBound(parts)
ints(i) = CInt(parts(i))
Next i
GetLine = ints
End Function
Private Function CompareLines(line1() As Integer, _
line2() As Integer) As Boolean
'Diese Funktion zählt, wieviele Integerwerte in beiden
'Arrays (line1, line2) vorkommen und gibt true zurück,
'wenn mehr als vier Werte identisch sind
Dim i As Integer, k As Integer, id As Integer
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then id = id + 1
Next k
Next i
CompareLines = id > 4
End Function
Private Function CompareLines2(line1() As Integer, _
line2() As Integer) As String
'Diese Funktion zählt, wieviele Integerwerte in beiden
'Arrays (line1, line2) vorkommen (CompareLines) und gibt
'den Wertstring zurück, wenn mehr als vier Werte identisch sind
CompareLines2 = ""
Dim i As Integer, k As Integer, id As Integer
Dim lineout As String
If CompareLines(line1, line2) Then
'.... es sind mehr als vier gleiche Werte vorhanden
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then _
lineout = lineout & CStr(line1(i)) & ", "
Next k
Next i
If Len(lineout) > 2 Then
lineout = Left(lineout, Len(lineout) - 2)
End If
CompareLines2 = lineout
End If
End Function
Private Sub FillOutput()
'Diese Funktion liest die Zeilen einer Datei (6 Integer pro Zeile, getrennt
' durch ,)
'und gibt für alle paarweisen Zeilenvergleiche, bei denen mehr als
'vier Werte identisch sind, diejenigen Werte aus, die in beiden Zeilen
' vorkommen
Dim file As String
file = "C:\daten\input.txt"
'Alle Zeilen lesen
Dim lines() As String
lines = GetLines(file)
'Ausgabe öffnen
Dim ak As Integer
ak = FreeFile
Open "C:\daten\output.txt" For Output As #ak
Dim i As Integer, k As Integer
Dim line1() As Integer, line2() As Integer
Dim lineout As String
'Schleife über alle Zeilen(strings)
For i = 1 To UBound(lines)
'Werte in Zeile besorgen
line1 = GetLine(lines(i))
'Schleife über alle Folgezeilen
For k = i + 1 To UBound(lines)
line2 = GetLine(lines(k))
'Zeile i, k vergleichen
lineout = CompareLines2(line1, line2)
If Not lineout = "" Then
'Falls mehr als vier identische Werte ...
Write #ak, lineout
End If
Next k
Next i
Close #ak
End Sub
Beitrag wurde zuletzt am 06.03.14 um 20:58:22 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 06.03.14 21:14 |
| hallo Manfred,
habe es zum laufen gebracht.
In der output.txt steht z.B. jetzt
"1,4,5,8,4"
"1,4,5,8,4"
"1,4,5,8,4"
"1,4,5,19,4"
"1,4,5,19,4"
"1,4,5,19,4"
"1,4,8,19,4"
"1,5,8,19,4"
"1,5,8,19,4"
"4,5,8,19,4"
"4,5,8,19,4"
"4,5,8,19,4"
"1,4,5,8,4"
"1,4,5,8,4"
"1,4,5,24,4"
"1,4,5,24,4"
"1,4,5,24,4"
"1,4,8,24,4"
"1,5,8,24,4"
"1,5,8,24,4"
"4,5,8,24,4"
"4,5,8,24,4"
"4,5,8,24,4"
"1,4,5,8,4"
"1,4,5,38,4"
usw. usw.
Warum steht hinten immer eine 4"
manchmal auch 2 oder 3
verstehe ich nicht
Die Input Datei hat 820 Zeilen und die Output nun 5090 Zeilen
Hier der Link zur Input Datei
Angelina.txt
LG
Angelina
Beitrag wurde zuletzt am 06.03.14 um 21:17:51 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 06.03.14 22:01 |
| Hallo!
Ich habe Deine Datei mit dem obigen Code laufen lassen.
Sie fängt so an ...
"1, 4, 5, 8, 40"
"1, 4, 5, 8, 40"
"1, 4, 5, 8, 40"
"1, 4, 5, 19, 40"
"1, 4, 5, 19, 40"
"1, 4, 5, 19, 40"
"1, 4, 8, 19, 40"
"1, 5, 8, 19, 40"
"1, 5, 8, 19, 40"
"4, 5, 8, 19, 40"
"4, 5, 8, 19, 40"
"4, 5, 8, 19, 40"
"1, 4, 5, 8, 40"
"1, 4, 5, 8, 40"
"1, 4, 5, 24, 40"
"1, 4, 5, 24, 40"
"1, 4, 5, 24, 40"
"1, 4, 8, 24, 40"
"1, 5, 8, 24, 40"
"1, 5, 8, 24, 40"
"4, 5, 8, 24, 40"
"4, 5, 8, 24, 40"
"4, 5, 8, 24, 40"
"1, 4, 5, 8, 40"
"1, 4, 5, 38, 40"
"1, 4, 5, 38, 40"
"1, 4, 5, 38, 40"
"1, 4, 8, 38, 40"
"1, 5, 8, 38, 40"
"1, 5, 8, 38, 40"
usw.
Da fehlt bei Deiner Ausgabe das letzte Zeichen pro Zeile.
Prüfe diesen Code in der Routine "CompareLines2".
(Die Foren-Software hat einen Fehler und wirft machmal
das Blanc am Ende einer geposteten Zeile weg.)
If line1(i) = line2(k) Then _
lineout = lineout & CStr(line1(i)) & ", " Wenn Du die Strichpunke im Output nicht magst,
ersetze einfach den Write-Befehl durch Print.
Beitrag wurde zuletzt am 06.03.14 um 22:02:42 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 07:48 |
| guten morgen Manfred,
vielen lieben Dank für deine Zeit !!!
ok - habe es nun geändert und es läuft.
Die output Datei ist jetzt natürlich ganz schön aufgebläht
und die Zeilen sind nicht mehr fortlaufend aufsteigend.
Es gibt jede Menge Kombis die jetzt mehrfach vorkommen in der
gesamten Datei.
Raus mit den mehrfachen ???
Für mich interessant sind nur die, die 2-3 mal vorkommen.
Also ist eine Kombination in der neuen output Datei 2-3 mal vorhanden
kommt sie in die End-Output Datei - aber nur 1x nicht wieder mehrfach.
LG
Angelina
Beitrag wurde zuletzt am 07.03.14 um 08:01:23 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.03.14 11:41 |
| Hallo!
Zielgerichtete Hinweise sind nur möglich,
wenn Du uns den Sinn dieser "Transaktionen" erklärst -
also was diese Input-Zahlen bedeuten und welche Informationen
daraus abzuleiten sind.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 12:03 |
| hallo,
die Input Zahlen stammen aus meinem kleinen Lottoprogramm.
Wenn ich nun in dieser Input Datei (in der mehrere 5er sind) so reduzieren kann
das nur noch wenige 5er Kombis verbleiben - denn ein 5er genügt in dieser Datei.
Wer braucht schon mehrere 5er.
Verstehst du mich nun?
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.03.14 12:40 |
| Eigentlich immer weniger ...
Das "Optimieren" von Lotto-Tipps "funktioniert"
nur deshalb in geringfügigem Maße, weil dabei
die "Dummheit" anderer ausgenutzt wird, z.B. stur
Geburtstage zu tippen.
Die Zahlen von 1 bis 12 oder 1 bis 31 bringen deshalb
- falls sie gezogen werden - deutlich niedrigere
Gewinn-Quoten.
Wer Lotto spielt, zahlt durch ca. 50% seines Einsatzes eine
Sondersteuer. Deshalb ist die Gewinn-Erwartung niedrig.
Ich bin nicht über die Gestaltung optimierter Tipp-Serien
informiert, glaube aber gelesen zu haben, daß es dabei gerade
auf die Häufung bestimmter Basis-Kombinationen ankommt, daß
also nicht auf einen 6er optimiert wird, sondern auf Gewinn-Serien
von 3er, 4er, 5er Kombinationen. Im Rahmen von Langfrist-Strategien
soll dadurch wohl in erster Linie das Verlustrisiko (d.h. Kosten)
gesenkt werden (durch kleine Zwischengewinne).
Um auf Deine Fragestellung zurück zu kommen:
Willst Du eine in Input.txt vorhandene Tippserie reduzieren,
d.h. Reihen entfernen falls sie eine bereits (mehrfach?) vorhandene
5er Kombi enthalten? Und dabei den Zufallsgenerator einsetzen, um zu
entscheiden, welcher der verglichenen Datensätze jeweils rausfliegt?
Oder willst Du zunächst ermitteln, welche 5er Kombi die größte Häufigkeit
in den Datenreihen besitzt und dann im zweiten Schritt Reihen entfernen,
in denen diese Kombination auftritt. Aber wie viele nach welchem Auswahl-
Kriterium?
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 14:51 |
| hallo Manfred,
Zitat: | |
Oder willst Du zunächst ermitteln, welche 5er Kombi die
größte Häufigkeit in den Datenreihen besitzt und dann im zweiten Schritt Reihen
entfernen, in denen diese Kombination auftritt.
Aber wie viele nach welchem Auswahl-Kriterium?
Ja dieser Ansatz ist gemeint
Aber nicht welche 5er Kombi die größte Häufigkeit in den Datenreihen besitzt
sonder
1. wie oft kommt welche 5er Kombi in der jetzigen output.txt vor
2. Auswahl-Kriterium = behalte nur noch die, die 2-3 mal vorhanden sind
schreibe diese dann in die output-ende.txt (jede natürlich nur 1x nicht 2-3 mal reinschreiben)
LG
Angelina
| |
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.03.14 16:32 |
| Füge diesen Code in den obigen Code ein, passe die Dateipfade an
und rufe die Routine CombiFrequencies aus.
Es werden alle Zeilen paarweise verglichen und für alle jeweils in beiden
verglichenen Zeilen vorkommenden 5er Reihen die Häufigkeiten registriert.
Ausgegeben werden alle 5er-Folgen, die beim Vergleichen mehr als einmal
auftauchen.
Die Zahlen innerhalb der Reihen werden ansteigend sortiert vorausgesetzt.
Nur grob getestet !!
Private Function CompareLines3(line1%(), line2%(), outvalues%()) As Boolean
'Die Routine prüft, ob in beiden Zeilen (line1, line2)
'5 identische Werte vorhanden sind und
'gibt diese Werte zurück (outvalues)
Dim i%, k%, id%
ReDim outvalues(UBound(line1))
id = -1
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then
id = id + 1
outvalues(id) = line1(i)
End If
Next k
Next i
CompareLines3 = (id = 4)
End Function
Private Sub RegisterEntry(entry%(), register%(), frequency%())
'Die Routine prüft, ob eine sortierte 5er Folge (Entry)
'bereits im Register vorhanden ist und zählt die
'Häufigkeit (in Frequency)
Dim i%, k%, l%, vorhanden As Boolean
For i = 1 To UBound(register, 2)
vorhanden = True
'Ist der Eintrag schon im Register?
For k = 0 To UBound(register, 1)
If Not entry(k) = register(k, i) Then
vorhanden = False: Exit For
End If
Next k
If vorhanden Then
'Eintrag bereits vorhanden
frequency(i) = frequency(i) + 1
Exit Sub
End If
Next i
l = UBound(register, 2)
'Register für neuen Eintrag verlängern
ReDim Preserve register(UBound(register, 1), l + 1)
ReDim Preserve frequency(l + 1)
'neuen Eintrag notieren
frequency(l + 1) = 1
For k = 0 To UBound(register, 1)
register(k, l + 1) = entry(k)
Next k
End Sub
Private Sub CombiFrequencies()
Dim file As String
file = "C:\daten\angelina.txt"
'Alle Zeilen lesen
Dim lines() As String
lines = GetLines(file)
Dim i%, k%
Dim line1%(), line2%(), outvalues%()
Dim register%(), frequency%()
ReDim register(4, 0)
'Zeilen paarweise miteinander vergleichen
For i = 1 To UBound(lines) - 1
line1 = GetLine(lines(i))
For k = i + 1 To UBound(lines)
line2 = GetLine(lines(k))
'Vergleichen
If CompareLines3(line1, line2, outvalues) Then
'bei gleicher 5er Folge: Register füllen
RegisterEntry outvalues, register, frequency
End If
Next k
Next i
'Ausgabedatei füllen
Dim ak%
ak = FreeFile
Open "C:\daten\output.txt" For Output As #ak
For i = 1 To UBound(frequency)
'Ab 2er Vorkommen einer 5erFolge: ausgeben
If frequency(i) > 1 Then
For k = 0 To UBound(register, 1)
If k < UBound(register, 1) Then
Print #ak, register(k, i) & ", ";
Else
Print #ak, register(k, i)
End If
Next k
End If
Next i
Close #ak
End Sub | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 17:31 |
| hallo Manfred,
habe alles eingefügt und angepasst.
Wenn ich nach Ablauf der Routine von gestern deine Routine von heute aufrufen möchte
1.
Call CombiFrequencies()
dann bekomme ich diese Meldung:
"Fehler beim Kompilieren:
Falsche Anzahl an Argumenten oder ungültige Zuweisung
zu einer Eigenschaft"
2.
meine Angelina.txt hat dieses Format in der Datei
Print #ak, lineout
lineout = lineout & CStr(Line1(i)) & " , "
nochmals danke danke für deine Zeit
PS:
Kann erst morgen früh wieder antworten.
Muß ins Krankenhaus arbeiten gehen ...
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 17:40 |
| hallo noch schnell
Fehler war bei mir
habe ich eingebaut
1.
Call CombiFrequencies()
dann bekomme ich diese Meldung:
"Fehler beim Kompilieren:
Falsche Anzahl an Argumenten oder ungültige Zuweisung
zu einer Eigenschaft"
Fehler behoben ....
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.03.14 17:57 |
| hallo Manfred,
so nochmals schnell ...
habe alles verbaut - läuft.
Kommen bei dir auch 530 Kombis á 5 Zahlen raus
bei dieser Einstellung?
Habe ich so angepasst.
Grundlage meine Angelina.txt
If frequency(i) = 2 Or frequency(i) = 3 Then
In der Ausgabe habe ich die ersten Zeilen so:
1, 6, 14, 15, 38
1, 6, 14, 18, 35
1, 4, 6, 14, 40
1, 6, 14, 18, 40
1, 4, 6, 14, 36
1, 6, 14, 27, 36
4, 6, 14, 27, 36
1, 6, 14, 27, 40
4, 6, 14, 27, 40
1, 6, 14, 29, 38
.
.
.
Die letzte Zahl pro Zeile steht weit rechts - warum?
Wegen meiner Änderung vom gestrigen VB-Code?
Print #ak, lineout
lineout = lineout & CStr(Line1(i)) & " , "
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.03.14 18:07 |
| Hallo!
In der Angelina.txt, die ich über Deinen Link neulich herunter geladen habe,
stehen aber andere Werte !!!
Ansonsten:
... weil dieser MaX ein schlampiger Programmierer ist ....
Nach Umwandlung der Ausgabe in einen String klappts mit dem
einheitlichen Format:
For i = 1 To UBound(frequency)
'Ab 2er Vorkommen einer 5erFolge: ausgeben
If frequency(i) = 2 Or frequency(i) = 3 Then
For k = 0 To UBound(register, 1)
If k < UBound(register, 1) Then
Print #ak, CStr(register(k, i)) & ", ";
Else
Print #ak, CStr(register(k, i))
End If
Next k
End If
Next i | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Blackbox | Datum: 07.03.14 18:44 |
| Hey
warum löst Ihr eigentlich Eure Schulaufgaben nicht allein? | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.03.14 19:36 |
| Hallo, Blackbox
.... ich hoffe doch sehr, daß VB6 an keiner Schule eingesetzt bzw. gelehrt wird !!!!
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 08.03.14 11:08 |
| guten morgen Manfred,
so ... nun läuft alles
1. Wie lange rechnet das Programm bei dir mit meiner Angelina.txt
2. Was kommt bei dir raus - Anzahl ?
3. Noch eine Frage
Normalerweise schaut meine Printzeile so aus
Druck in eine txt Datei.
Print #out, i1; ","; i2; ","; i3; ","; i4; ","; i5; ","; i6
Gibt es eine Möglichkeit in eine html zu drucken - so das ich diese Seite direkt
im Netz aufrufen kann?
Nochmals vielen lieben Dank für deine Zeit und Mühe
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 08.03.14 16:19 |
| Hallo!
zu 1.)
Der Code ist nicht optimiert, z.B. kann der häufige Aufruf der
Konvertierung durch GetLine im Rahmen einer Vorverarbeitung der
geladenen Zeilen reduziert werden.
(Die 820 Zeilen in der Angelina.txt werden innerhalb von ca. 5 Sekunden
auf einem handelsüblichen PC verarbeitet.)
zu 2.)
Die 335790 paarweisen Vergleiche ergeben 5090 mal eine doppelt vorkommende
5er Folge. Die Zahl der unterscheidbaren Folgen (im Register) beträgt 1650,
davon sind 520 Folgen 2 oder 3 mal enthalten.
zu 3.)
Was genau Du Dir unter dem Aufbau einer HTML-Datei aus den
Daten vorstellst, kann ich nicht beurteilen.
Gewöhnlich verwendet man eine Datenbank, deren Inhalt über eine
Internet-Seite mit Login-Funktionalität abgefragt werden kann.
Du kannst die Datei aber auch z.B. in Word laden und als HTML
formatiert wieder speichern.
Ich habe die Routine "Text2HTML" aus dem VBArchiv-Tipp leicht
für Deine Zwecke angepaßt. Übergib als Parameter den Pfad zur
Output.txt und du erhälst im gleichen Ordner eine Output.txt.htm,
die einen einfachen HTML-Body zu den Daten hinzufügt.
Die Forensoftware kann eine Codezeile nicht verarbeiten:
Hinter TmpLine muß die geklammerte Zeichenfolge br eingefügt werden
(Zeilenumbruch).
Public Sub TextDatei2HTML(ByVal filename As String, _
Optional ByVal Titel As String)
Dim Text As String, sTmpLine As String
Dim F As Integer
Dim sHeader As String
Dim OutFileName As String
'Dateiinhalt lesen
F = FreeFile
Open filename For Input As #F
Do
Line Input #F, sTmpLine
Text = Text & sTmpLine & "/br/" & vbCrLf
Loop Until EOF(F)
Close #F
' HTML-Header
If Titel = "" Then Titel = "Text2HTML"
sHeader = "<HEAD><TITLE>" & Titel & "</TITLE></HEAD>"
OutFileName = filename & ".HTM"
' HTML-Datei speichern
F = FreeFile
Open OutFileName For Output As #F
Print #F, "<HTML>"
Print #F, sHeader
Print #F, "<BODY>"
Print #F, Text
Print #F, "</BODY>"
Print #F, "</HTML>"
Close #F
End Sub
Beitrag wurde zuletzt am 08.03.14 um 16:23:48 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 08.03.14 17:54 |
| hallo Manfred,
1.
kann
Public Sub TextDatei2HTML(ByVal filename As String, _
Optional ByVal Titel As String)
auch mit einem Call aufgerufen werden?
2.
derzeit kommt bei mir so etwas als HTM raus
1 , 4 , 6 , 14 , 15 , 38 /br/ 1 , 4 , 6 , 14 , 18 , 35 /br/ 1 , 4 , 6 , 14 , 18 _
, 40 /br/ 1 , 4 , 6 , 14 , 27 , 36 /br/ 1 , 4 , 6 , 14 , 27 , 40 /br/ 1 , 4 , _
6 , 14 , 29 , 38 /br/ 1 , 4 , 6 , 14 , 35 , 36 /br/ 1 , 4 , 6 , 14 , 36 , 40 _
/br/ 1 , 4 , 6 , 15 , 20 , 38 /br/ 1 , 4 , 6 , 15 , 38 , 39 /br/ 1 , 4 , 6 , _
15 , 38 , 46 /br/ 1 , 4 , 6 , 18 , 20 , 35 /br/ 1 , 4 , 6 , 18 , 20 , 40 /br/ _
1 , 4 , 6 , 18 , 35 , 39 /br/ 1 , 4 , 6 , 18 , 35 , 46 /br/ 1 , 4 , 6 , 18 , _
39 , 40 /br/ 1 , 4 , 6 , 18 , 40 , 46 /br/ 1 , 4 , 6 , 20 , 27 , 36 /br/ 1 , _
4 , 6 , 20 , 27 , 40 /br/ 1 , 4 , 6 , 20 , 29 , 38 /br/ 1 , 4 , 6 , 20 , 35 , _
36 /br/ 1 , 4 , 6 , 20 , 36 , 40 /br/ 1 , 4 , 6 , 27 , 36 , 39 /br/ 1 , 4 , 6 _
, 27 , 36 , 46 /br/ 1 , 4 , 6 , 27 , 39 , 40 /br/ 1 , 4 , 6 , 27 , 40 , 46 _
/br/ 1 , 4 , 6 , 29 , 38 , 39 /br/ 1 , 4 , 6 , 29 , 38 , 46 /br/ 1 , 4 , 6 , _
35 , 36 , 39 /br/ 1 , 4 , 6 , 35 , 36 , 46 /br/ LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 08.03.14 17:59 |
| Natürlich kannst Du eine Sub per Call rufen.
Du mußt das br im Code klammern < br >
- aber ohne die Blancs.
Die Forensoftware stellt das nicht korrekt dar.
Es handelt sich um das HTML-Zeilen-Umbruchzeichen.
Beitrag wurde zuletzt am 08.03.14 um 18:01:22 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 10.03.14 11:06 |
| hallo Manfred,
sorry mußte über das Wochenende im Krankenhaus arbeiten.
So - html funktioniert perfekt - vielen lieben Dank !!!
Manfred X schrieb:
Zitat: | |
zu 1.)
Der Code ist nicht optimiert, z.B. kann der häufige Aufruf der
Konvertierung durch GetLine im Rahmen einer Vorverarbeitung der
geladenen Zeilen reduziert werden.
(Die 820 Zeilen in der Angelina.txt werden innerhalb von ca. 5 Sekunden
auf einem handelsüblichen PC verarbeitet.)
zu 2.)
Die 335790 paarweisen Vergleiche ergeben 5090 mal eine doppelt vorkommende
5er Folge. Die Zahl der unterscheidbaren Folgen (im Register) beträgt 1650,
davon sind 520 Folgen 2 oder 3 mal enthalten. | |
Also bei mir dauert es danach ca. 8-9 Minuten
nachdem die 820 Zeilen (ca. 5 Sekunden)abgearbeitet sind
bis die 520 Zeilen ausgegeben werden.
Liegt es vielleicht daran das diese Datei für den input "zu 2.)"
nicht aufsteigend sortiert ist? Würde es dann schneller gehen als 8-9 Minuten?
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 10.03.14 12:58 |
| Hallo!
Ich verstehe den Zweck dieses Programms nicht,
weiß nichts über die Menge der Daten, die zu
verarbeiten sind oder welchen Voraussetzungen
die Eingabe-Datenzeilen genügen.
Insofern kann ich den Code nicht gezielt optimieren.
Wie es zu einem Zeitbedarf von etlichen Minuten kommt,
kann ich nicht beurteilen.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 10.03.14 13:20 |
| hallo Manfred,
ok dachte du hättest es verstanden.
Die Datei Angelina.txt durchläuft FillOutput und was da raus kommt
wird mit CombiFrequencies nochmals bearbeitet.
Und dort liegt das Problem "CombiFrequencies" braucht bei mir 8-9 Minuten.
Bis es fertig ist.
LG
Angelina
Beitrag wurde zuletzt am 10.03.14 um 13:21:00 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 10.03.14 13:26 |
| Nö!
"FillOutput" war die erste Version und wird nicht mehr benötigt.
Die Datei "Angelina.txt" wird durch "CombiFrequencies"
verarbeitet und "OutPut.txt" wird gefüllt.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 10.03.14 14:56 |
| hallo Manfred,
sorry sorry war dann mein Fehler.
Hatte 2 x Call:
1x FillOutput
und
1x CombiFrequencies
darum hat es 8 Minuten gedauert.
Nun - mit einem Call - geht es ruck zuck !!!
Sorry nochmals
werde heute und morgen mal testen testen ... und testen ...
melde mich bis Mittwoch nochmals bei dir
nochmals vielen herzlichen lieben Dank für deine Zeit und Ausdauer
kuss kuss ...
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 24.03.14 11:06 |
| hallo Manfred,
sorry - wollte mich ja früher melden - hatte echt keine Zeit gefunden
an der Sache weiter zu arbeiten.
Jetzt habe ich wieder Luft
So habe alles getestet läuft so wie es soll - danke nochmals für deine Zeit und Mühe.
An einer Sache hänge ich zur Zeit noch - vielleicht hast du ja noch etwas Lust mir zur Seite
zu stehen:
Also hier mal eine txt Datei
SA-Ziehungen.txt
Ich müsste wissen welche Zahl in einem gewissen Zeitraum wie oft vorkommt.
Nicht mehr und nicht weniger
Beispiel:
Startzeitraum ist: 3050
Nun wird der Bereich ab 3050 (steht vorne in der jeweiligen Zeile)
3050 07 10 29 30 34 46 00
bis
2999 07 30 31 35 39 46 08
sind also immer 52 Zeilen die zur Zählung verwendet werden - ausgewertet.
Ausgabe müsste in eine txt Datei geschrieben werden - welche Zahl in diesem Zeitraum
wie oft vorhanden ist. Sind somit 52 mal 7 Zahlen - welche Zahl ist wie oft vorhanden.
Wenn eine 00 in einer Zeile steht braucht die nicht gezählt zu werden. Nur was größter als
00 ist.
Würdest du mir noch helfen wollen?
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 24.03.14 18:04 |
| Hallo!
Einfach eine Leseschleife, eine If-Bedingung für das Zeitintervall
und ein Zählerregister .....
Public Sub NumberFrequency _
(ByVal Filename, ByVal start As Integer, ByVal ende As Integer)
Dim ik As Integer, ak As Integer 'Kanäle
Dim line As String, fields() As String 'Dateizeile
Dim dateval As Integer 'Datum in Zeile
Dim i As Integer, k As Integer 'Loopings
Dim z As Integer ' Ziehungszähler
'Zeit-Intervall: Grenzen sicher stellen
If ende < start Then
i = start
start = ende
ende = i
End If
'Zählerregister
Dim frequency(49)
ik = FreeFile
Open Filename For Input As #ik
While Not EOF(ik)
Line Input #ik, line
'(numerische) Felder in einer Zeile
fields = Split(line, " ")
'Check
If Not UBound(fields) = 7 Then Stop
'Datumsfeld wandeln
dateval = CInt(fields(0))
'Zeitfilter setzen
If dateval >= start And dateval <= ende Then
'Häufigkeitszähler füllen
For i = 1 To 7
frequency(CInt(fields(i))) = frequency(CInt(fields(i))) + 1
Next i
z = z + 1
End If
Wend
Close #ik
ak = FreeFile
Open "C:\daten\numberfrequencies.txt" For Output As #ik
Print #ak, Filename
Print #ak, "Start: "; start
Print #ak, "Ende: "; ende
Print #ak, "Ziehungen: "; z
For i = 1 To 49
Print #ak, i, frequency(i)
Next i
Close #ak
End Sub Aufruf der Routine:
Call NumberFrequency("C:\daten\sa-ziehungen.txt", 3050, 2999)
Beitrag wurde zuletzt am 24.03.14 um 18:12:37 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 24.03.14 20:25 |
| hallo Manfred,
großen lieben herzlichen Dank - danke danke danke !!!
Fehlerfrei - 1A - so meinte ich es - gibt es noch Männer die mich verstehen
kuss kuss ...
kurze Frage:
wenn z.B. wie hier in der Ausgabe C:\daten\numberfrequencies.txt
eine Zahl nicht vorhanden war (hier die 2) wird keine 0 sondern nichts gedruckt
wie bekomme ich da den Wert 0 hin?
1 1
2
3 1
4 1
5 2
Das es so ausschaut:
1 1
2 0
3 1
4 1
5 2
PS:
Gibt es hier im Forum eine Kaffekasse? Würde euch gerne etwas spenden
kann man ruhig ja mal für die ganze Arbeit und Mühe machen ...
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 24.03.14 22:23 |
| Der Print-Befehl für die Ausgabe in eine Datei schreibt eine 0.
Wie sieht Dein Befehl für den Druck aus?
Diese Anweisung sollte eigentlich auch eine 0 drucken:
Printer.Print i, frequency(i) | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 25.03.14 05:54 |
| hallo Manfred,
original Print von dir - nichts verändert
Print #ak, Filename
Print #ak, "Start: "; start
Print #ak, "Ende: "; ende
Print #ak, "Ziehungen: "; z
For i = 1 To 49
Print #ak, i, frequency(i)
Next i
Close #ak Bekomme keine Null gedruckt.
Wenn ich es so mache:
Print #ak, Filename
Print #ak, "Start: "; start
Print #ak, "Ende: "; ende
Print #ak, "Ziehungen: "; z
For i = 1 To 49
Printer.Print i, frequency(i)
Print #ak, i, frequency(i)
Next i
Close #ak springt der Drucker an und es wird gedruckt.
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 25.03.14 12:12 |
| hallo Manfred,
habe es mal so geschrieben
If frequency(i) = 0 Then frequency(i) = " 0"
Print #ak, i, frequency(i)
Next i
Close #ak if Abfrage
ist das so ok - oder?
Nun wird die Null geschrieben
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 25.03.14 16:07 |
| Ergänze bei der Deklaration des Zählerregisters die Typangabe ....
'Zählerregister
Dim frequency(49) as Integer Erklärung:
Bei fehlender Angabe des Typs entsteht ein Variant-Array.
Der Initialisierungswert der Arrayfelder ist deshalb "empty",
d.h. es wir nichts ausgegeben.
Deklariert man das Array als Integer, ist der Intialisierungs-
wert 0 und dieser Wert wird ggf. auch ausgegeben.
Beitrag wurde zuletzt am 25.03.14 um 16:15:58 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 26.03.14 19:38 |
| hallo Manfred,
ok - habe es geändert funktioniert 1A
ich muss noch einige kleine Dinge erarbeiten um die Sache rund zu machen
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 14:41 |
| hallo Manfred,
kann man eine Rückwertssuche verwirklichen mit der Vorgabe
wenn sich der Wert ändert - dann print in eine txt Datei?
Suche.txt
Die txt Datei hat z.B. diesen Inhalt:
2
2
2
2
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1 Am Ende der Datei steht der Wert 1
dieser Wert ist 8 x infolge (Rückwerts) bevor der Wert von 1 auf 2 geht.
Ausgabe würde dann so ausschauen:
1 1 1 1 1 1 1 1 - Laufzeit = 8
fertig !!!
Laufzeit = 8 weil der Wert 1 (8x infolge war)
In dieser Datei können die Werte von 0 bis 20 sein - also nicht nur 1 oder 2
wie in diesem Beispiel.
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 18:03 |
| Hallo!
Du kannst die Datei durchlaufen und bei jedem Wechsel
von zwei aufeinander folgenden Werten den neuen Wert notieren
und damit anfangen, ihn zu zählen - falls ich das richtig verstanden habe.
Sub HäufigkeitSeitLetztemWertwechsel _
(ByVal file_in As String, ByVal file_out As String)
Dim ik As Integer, ak As Integer 'Kanäle
Dim number1 As Integer, number2 As Integer 'Vergleich
Dim i As Integer 'Loop
Dim c As Integer 'Zähler
Dim n As Integer 'gezählter Wert nach letztem Wechsel
ik = FreeFile
Open file_in For Input As #ik
Input #ik, number1
c = 1: n = number1
While Not EOF(ik)
Input #ik, number2
If Not number1 = number2 Then
c = 1: n = number2 'Wert wechselt
Else
c = c + 1 'Wert wechselt nicht/zählen
End If
number1 = number2 'für nächsten Vergleich
Wend
Close #ik
'Ausgabedatei füllen
ak = FreeFile
Open file_out For Output As #ak
For i = 1 To c
Print #ak, n;
Next i
Print #ak, " Laufzeit: "; c
Close #ak
End Sub | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 18:22 |
| hallo Manfred,
nochmals vielen lieben dank für deine Zeit.
Beim Aufruf
Call HäufigkeitSeitLetztemWertwechsel gibt es die Fehlermeldung:
"Fehler beim Kompilieren: Argument ist nicht optional"
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 18:28 |
| Korrekt.
Du mußt als ersten Parameter (file_in) den Pfad/Namen der Datei,
die die zu durchsuchende Zahlenfolge enthält, angeben und als
zweiten Parameter (file_out) Pfad/Name der Datei, in die das Ergebnis
geschrieben werden soll. (Diese Datei wird überschrieben!)
Call HäufigkeitSeitLetztemWertwechsel("C:\daten\suche.txt", _
"C:\daten\LetzteFolge.txt") | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 18:39 |
| hallo Manfred,
ok - ja ich bin leider nicht gerade die hellste Leuchte
habe es gerade bemerkt.Input / Output.
Oh ...... muss ich noch lernen ......
läuft 1A - richtig verstanden - perfekt - mehr braucht es nicht
Manfred X schrieb:
Zitat: | | Du kannst die Datei durchlaufen und bei jedem Wechsel
von zwei aufeinander folgenden Werten den neuen Wert notieren
und damit anfangen, ihn zu zählen - falls ich das richtig verstanden habe. | |
Meinst du damit es ist variabel?
reicht so völlig
Kussi
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 18:44 |
| Das war nur ein Hinweis.
Die Routine betreibt keine "Rückwärtssuche", sondern liest
die Daten sequentiell von vorne und fängt bei jedem
Wechsel aufeinanderfolgender Werte neu an zu zählen.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 19:11 |
| hallo Manfred,
ok habe ich verstanden
Das ist gut so - das "die Daten sequentiell von vorne gelesen werden und fängt bei jedem
Wechsel aufeinanderfolgender Werte neu an zu zählen."
Somit könnte man dies auch (mit kleinen Änderungen) umbauen, das man letztendlich
erfährt wann ein Wechsel erfolgt. Also wenn z.B. 8x die eins in Folge war kommt ein
Wechsel zu 2 oder was auch immer. Oder wenn die zwei 3x in Folge war kommt ein Wechsel
zu 1 oder was auch immer. Wann kommt ein Wechsel zu welcher Zahl - Immer gesehen von
nun Dateianfang bis Dateiende. Nicht wie vorher von unten nach oben.
Ich möchte hier bitte nicht den Eindruck erwecken das ich hier etwas kommerziell
verwende. Mein Opa (86 Jahre) spielt seit Jahren Lotto. Er macht alles von Hand
zu Fuß - sitzt tagelang da und rechnet und schreibt auf. Ich wollte ihm einen
Gefallen tun und ihm die Arbeit etwas erleichtern. Er fragte mich "kennst du einen
der einen kennt ...." Ich bin wirklich sehr dankbar für deine Hilfe - danke danke danke.
Habe ihm einen alten PC gegeben dort nutzt er die kleinen Tools von dir und kann sich
die Schreibarbeit etwas erleichtern. Er ist happy - danke danke danke nochmals.
LG und 1000 Küsse
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 19:54 |
| Vielleicht solltest Du versuchen,
Deinem Opa klar zu machen, daß er gegen einen
Zufallsprozeß nicht "anrechnen" kann.
Wenn er sich unbedingt der "Faszination" des
Lottospielens hingeben will, sollte er sich einer
Tippgemeinschaft anschließen, die ein wenig Einblick
in die mathematischen Grundlagen der Tipp-Serien-"Optimierung"
besitzt.
Das senkt zwar die Chancen auf einen hohen Gewinn,
verbessert aber die Chancen für kleine Zwischengewinne.
Gut gemacht, kann man langfristig dadurch etwa 20% des Einsatzes
zurückgewinnen - und wahrt die Chance per Zufall irgendwann mal
einen mittel-großen Gewinn einzustreichen.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 20:56 |
| hallo Manfred,
werd ich morgen ausrichten!
Zitat: | | Call HäufigkeitSeitLetztemWertwechsel("C:\daten\suche.txt", _
"C:\daten\LetzteFolge.txt")
| |
Ich habe nun den output 49 mal eingerichtet von
LetzteFolge1.txt
bis
LetzteFolge49.txt
Dies sind nun 49 Dateien
Wie bekomme ich dies auf eine Seite - sprich in eine Datei.
1-49 öffnen und in eine Datei speichern ???
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 21:02 |
| Ich verstehe leider nicht, was genau z.B. in
"letzteFolge49.txt" drin steht oder stehen soll.
Und was genau steht in der Datei "Suche.txt", die
untersucht/aufbereitet werden soll?
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 21:15 |
| hallo Manfred,
Ich verstehe leider nicht, was genau z.B. in
letzteFolge49.txt drin steht oder stehen soll.
Und was genau steht in der Datei Suche.txt, die
untersucht/aufbereitet werden soll?
Du hast doch das Modul "HäufigkeitSeitLetztemWertwechsel" geschrieben
dieses hat als output die Datei "letzteFolge.txt"
Mit dem Inhalt " 1 1 1 1 1 1 1 1 Laufzeit: 8"
Nun habe ich diese output datei nicht nur 1 x sondern 49 x
letzteFolge1.txt bis letzteFolge49.txt
Natürlich immer mit anderen Werten in der ersten Zeile (gibt ja immer nur eine Zeile pro Datei)
Nun meine Frage:
Wie bekomme ich diese 49 Dateien (den Inhalt dieser) in eine Datei geschrieben?
Habe ich es besser erklärt?
LG
Angelina
Beitrag wurde zuletzt am 27.03.14 um 21:17:12 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 21:19 |
| Nö!
Wenn Du immer die gleiche Datei "Suche.Txt" als "file_in"
vorgibst, steht doch in allen Ausgabedateien das gleiche ....
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 27.03.14 21:52 |
| hallo,
ich habe das ganze aber 49 mal gemacht.
Dein Modul wird 49 x aufgerufen (habe ich so geändert - 49 x call) und jeweils wird
eine Datei als file_out angelegt.
Somit gibt es 49 x LetzteFolge.txt
LetzteFolge1.txt bis LetzteFolge49.txt
Ich möchte eigentlich nur 49 Dateien öffnen - deren Inhalt aus der ersten Zeile (gibt nur eine Zeile)
einlesen und in e i n e Datei abspeichern.
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 27.03.14 22:18 |
| Was steht in Suche.txt drin?
Gibt es diese Datei auch 49x?
Oder stehen Zahlenfolgen mit Werten 1 bis 49 in
der Datei suche.txt und Du willst für jede
Zahl die Länge der letzten Folge dieser Zahl
- auch wenn das nicht die absolut letzte Folge
in der Datei ist?
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 28.03.14 11:45 |
| Manfred X schrieb:
Zitat: | | Was steht in Suche.txt drin?
Gibt es diese Datei auch 49x?
Oder stehen Zahlenfolgen mit Werten 1 bis 49 in
der Datei suche.txt und Du willst für jede
Zahl die Länge der letzten Folge dieser Zahl
- auch wenn das nicht die absolut letzte Folge
in der Datei ist?
| |
hallo Manfred,
so habe nochmals bei Opa nachgefragt.
Ich hatte einen Gedankenfehler.
Alle Dateien gibt es nur 1 x - nicht wie ich gestern geschrieben habe 49 x
Somit bleibt alles so wie es ist. Also vergessen wir das mit Input/Output von
49 mal.
Sorry - war gestern doch schon spät
Bleibt nur noch die Aufgabe/Lösung bzgl. wie ich gestern geschrieben habe.
Zitat: | |
das man letztendlich
erfährt wann ein Wechsel erfolgt. Also wenn z.B. 8x die eins in Folge war kommt ein
Wechsel zu 2 oder was auch immer. Oder wenn die zwei 3x in Folge war kommt ein Wechsel
zu 1 oder was auch immer. Wann kommt ein Wechsel zu welcher Zahl - Immer gesehen von
nun Dateianfang bis Dateiende. Nicht wie vorher von unten nach oben. | |
Überlege ich heute noch ...
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Franki | Datum: 29.03.14 01:19 |
| Hallo Manfred,
Zitat: | | Vielleicht solltest Du versuchen,
Deinem Opa klar zu machen, daß er gegen einen
Zufallsprozeß nicht "anrechnen" kann.
| |
Ich denke, dass er das durchaus weiß und die ganze Rechnerei, egal ob per Hand oder per PC eher als Hobby betreibt. Denn die Generation 80+ weiß durchaus wie Lotto funktioniert und grade bei jahrelanger Erfahrung damit weiß man was man damit erreichen kann oder auch nicht.
Zitat: | |
Wenn er sich unbedingt der "Faszination" des
Lottospielens hingeben will, sollte er sich einer
Tippgemeinschaft anschließen,
...
Das senkt zwar die Chancen auf einen hohen Gewinn,
verbessert aber die Chancen für kleine Zwischengewinne.
Gut gemacht, kann man langfristig dadurch etwa 20% des
Einsatzes zurückgewinnen.
| |
Na das ist doch mal eine super Kapitalanlage wo man 20% seines Einsatzes langfristig evtl. zurück bekommt. Du bringst es indirekt auf den Punkt, Lotto ist sinnlos, ich füge hinzu wenn schon Glücksspiel, dann eher Roulette im Casino. Da sind die Chancen wesentlich höher. Also das Geld pro Woche vom Lotto gespart, einmal im Jahr damit ins Casino, da hat man höhere Chancen aus dem Geld mehr zu machen. Auch das ist ein Glücksspiel, und die Spielbanken beugen vor, führen Statistiken (Permanenzanzeigen die sogar öffentlich sind) intern gibt es dann Kesselqualitätszahlen usw.
Ich sehe diese ganze Diskussion hier eher als Hobby, einerseits um das Programmieren zu lernen, andererseit vom Opa der da mal was testen möchte.
Aber alles völlig OK, mein Vater ist z.B. auch Generation 80+ und hat auch einen PC aber ein anderes Hobby wo ihm ein PC nicht wirklich helfen kann.
Gruß
Frank
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 29.03.14 08:20 |
| Hallo!
Ergänzender Hinweis:
Die langfristige 20% Rückgewinnung des Einsatzes gilt nur für das
in mathematisch ausgearbeiteten umfangreichen (= teuren) Tipp-Serien
tatsächlich eingesetzte Geld. Professionelle Anbieter kassieren Gebühren
(für Werbung etc.) und deshalb sinkt der zu erwartende "Ertrag", den der
einzelne Spieler zurück erhält (wie man so liest: oft auf unter 10% !!).
Wer wirklich eine halbwegs begründete Perspektive für Profit haben möchte,
setzt nicht auf den Zufall, sondern auf den (allerdings meist illusionären !!)
"Informations-Vorsprung" - d.h. er handelt mit Aktienoptionen, Termingeschäften
und anderem "Hoch-Risiko"-Zeugs.
Beim Lotto ist die Gewinn-Erwartung niedrig. Wer das realistisch betrachtet,
der wird wohl verzichten.
Es gibt dennoch Millionen Spieler, denen durch ständige Medienberichte
über Riesen-Jackpots oder Lotto-Millionäre der Kopf verdreht wird.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 30.03.14 17:23 |
| hallo Manfred,
könntest du - mit geringem Zeitaufwand für dich - die Frage lösen?
In der txt.Datei
suchen-Neu.txt
stehen Werte wie:
9
9
9
9
9
10
11
11
10
10
9
10
10
10
10
10
10
10
10
9
8
8
9
10
10
10
10
9
9
9
9
9
9
9
8
7
7
7
6
6
6
6
6
5
5
5
5
5
5
5
5
5
5
5
5
5
6
.
.
. usw. Beginnend von Dateianfang zu lesen
9
9
9
9
9
Frage "Welche Werte folgen nach 9"
In diesem Beispiel ist es die 10
Schaut man in der txt.Datei weiter wann wieder der Wert 9 vorkommt
sieht man das wieder eine 10 folgt (also bereits das 2x folgt eine 10)
Schaut man in der txt.Datei weiter wann wieder der Wert 9 vorkommt
sieht man das diesmal der Wert 8 folgt (also 1x folgt eine 8)
Schaut man in der txt.Datei weiter wann wieder der Wert 9 vorkommt
sieht man das wieder eine 10 folgt (also bereits das 3x folgt eine 10)
Schaut man in der txt.Datei weiter wann wieder der Wert 9 vorkommt
sieht man das diesmal der Wert 8 folgt (also 2x folgt eine 8)
usw. bis Datei-Ende
Natürlich mit allen Werten nicht nur "Welche Werte folgen nach 9)
sondern
Welche Werte folgen nach 0
Welche Werte folgen nach 1
Welche Werte folgen nach 2
Welche Werte folgen nach 3
.
.
.
Die Werte können von 0 bis 10000 sein.
Ausgabe eventuell so in eine txt Datei:
Nach 9 folgt 8 = 3 x
Nach 9 folgt 10 = 4 x
Ungefähr verstanden?
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 30.03.14 18:44 |
| Option Explicit
'Datentyp für Registrierung eines Zahlenübergangs
Private Type Wechsel
vorher As Integer
nachher As Integer
anzahl As Integer
End Type
'Register der Übergangshäufigkeiten
Private register() As Wechsel
'Verwaltung des Registers
Private Sub RegistriereWechsel(ByVal vorher As Integer, _
ByVal nachher As Integer)
Dim i As Integer, gefunden As Boolean
gefunden = False
For i = 1 To UBound(register)
With register(i)
If .vorher = vorher And .nachher = nachher Then
'vorhandener Wechsel / Zählen
.anzahl = .anzahl + 1
gefunden = True: Exit For
End If
End With
Next i
If Not gefunden Then
'neuer Wechsel
i = UBound(register) + 1
ReDim Preserve register(i)
Dim w As Wechsel
w.vorher = vorher
w.nachher = nachher
w.anzahl = 1
register(i) = w
End If
End Sub
Private Function NumLen(ByVal number As Integer, _
minlen As Integer) As String
'Formatierung der Ausgabe
NumLen = CStr(number)
While Len(NumLen) < minlen
NumLen = " " & NumLen
Wend
End Function
Private Sub Form_Load()
ReDim register(0)
Dim ik%, ak%, i%, z%, w%
Dim number1%, number2%
ik = FreeFile
Open "C:\daten\suchen-neu.txt" For Input As #ik
'Datei lesen
Input #ik, number1
While Not EOF(ik)
Input #ik, number2
If Not number1 = number2 Then
RegistriereWechsel number1, number2
w = w + 1
End If
number1 = number2
z = z + 1
Wend
Close #ik
ak = FreeFile
'Ausgabe füllen
Open "C:\daten\zahlenübergänge.txt" For Output As #ak
Print #ak, "Anzahl Zahlen: "; z
Print #ak, "Anzahl Übergänge: "; w
Print #ak, ""
For i = 1 To UBound(register)
With register(i)
Print #ak, "Nach "; NumLen(.vorher, 3); " folgt "; _
NumLen(.nachher, 3); " = "; NumLen(.anzahl, 3)
End With
Next i
Close #ak
End Sub | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 30.03.14 19:10 |
| hallo Manfred,
ups - so schnell ...
hm....
1. Aufruf über "Call Form_Load" - richtig ?
2. Fehlermeldung "Fehler beim Kompilieren: ReDim ungültig"
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 30.03.14 19:46 |
| Wenn Du ein Projekt anlegst und den gesamten Code
in "Form1" kopierst, kannst Du direkt starten.
Die Form_Load-Ereignisroutine ist dan die Startroutine.
Weshalb das Redim bei Dir ungültig ist, kann ich im Moment
nicht beurteilen. Bei mir läuft der Code.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 30.03.14 19:59 |
| hallo Manfred,
habe folgendes geändert:
Private Sub Form_Load() in
Sub Zahlenfolge() ReDim (Fehlermeldung ist weg)
Jedoch hier:
Option Explicit
'Datentyp für Registrierung eines Zahlenübergangs
Private Type Wechsel
vorher As Integer
nachher As Integer
anzahl As Integer
End Type
'Register der Übergangshäufigkeiten
Private register() As Wechsel
'Verwaltung des Registers
Private Sub RegistriereWechsel(ByVal vorher As Integer, _
ByVal nachher As Integer)
usw.
.
.
. Private register() As Wechsel
hier gibt er Fehlermeldung aus:
Fehler beim Kompilieren:
Nach End Sub, End Function oder End Property können nur Kommentare stehen
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 30.03.14 20:13 |
| Welche VB-Version verwendest Du? VB6?
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 31.03.14 05:42 |
| hallo Manfred,
ja habe VB6
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 31.03.14 07:56 |
| Hallo Manfred,
so habe mal alles von gestern in ein neues Projekt gemacht
und siehe da es läuft
Warum es im bestehenden Projekt nicht geht - keine Ahnung.
Egal!
Habe nun bemerkt das - bei der Ausgabe Output - doch eine ganz
wichtige Information fehlt.
Derzeit:
Nach .. folgt .. = ..
dies ist soweit perfekt umgesetzt und du hast mich richtig verstanden
Schaut man sich den Input an "suchen-Neu.txt"
so stellt man fest, das wir noch nicht wissen wie oft ein Wert besteht bevor
ein Wechsel kommt.
Also ich meine:
9
9
9
9
9
10
11
11
10
10
9
10
10
10
10
10
10
10
10 Von oben beginnend
Wir sehen den Wert 9 dieser Wert besteht 5 x bevor ein Wechsel z.B. zu 10 kommt usw.
Könntest du diese kleine Änderung umbauen - dann ist es gut - und es reicht mal
Ausgabe eventuell so:
Nach 9 folgt 10 = xmal - wenn 9 = 5 x bestanden hat
Nochmals ganz großen Dank an dich !!!
LG
Angelina
Beitrag wurde zuletzt am 31.03.14 um 07:58:17 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 31.03.14 08:55 |
| Option Explicit
Private Type Wechsel2
vorher As Integer
freqvorher As Integer
nachher As Integer
anzahl As Integer
End Type
Private register() As Wechsel2
Private Sub RegistriereWechsel(ByVal vorher As Integer, _
ByVal freqvorher As Integer, _
ByVal nachher As Integer)
Dim i As Integer, gefunden As Boolean
gefunden = False
For i = 1 To UBound(register)
With register(i)
If .vorher = vorher And .nachher = nachher _
And .freqvorher = freqvorher Then
'vorhandener Wechsel / Zählen
.anzahl = .anzahl + 1
gefunden = True: Exit For
End If
End With
Next i
If Not gefunden Then
'neuer Wechsel
i = UBound(register) + 1
ReDim Preserve register(i)
Dim w As Wechsel2
w.vorher = vorher
w.freqvorher = freqvorher
w.nachher = nachher
w.anzahl = 1
register(i) = w
End If
End Sub
Private Function NumLen(ByVal number As Integer, _
minlen As Integer) As String
'Formatierung der Ausgabe
NumLen = CStr(number)
While Len(NumLen) < minlen
NumLen = " " & NumLen
Wend
End Function
Private Sub Form_Load()
ReDim register(0)
Dim ik%, ak%, i%, z%, w%
Dim fv% 'Frequenz der Folge vor dem Wechsel zählen
Dim number1%, number2%
ik = FreeFile
Open "C:\daten\suchen-neu.txt" For Input As #ik
'Datei lesen
Input #ik, number1
While Not EOF(ik)
Input #ik, number2
fv = fv + 1
If Not number1 = number2 Then
RegistriereWechsel number1, fv, number2
w = w + 1
fv = 0
End If
number1 = number2
z = z + 1
Wend
Close #ik
ak = FreeFile
QuickSort register, 1, UBound(register)
'Ausgabe füllen
Open "C:\daten\zahlenübergänge2.txt" For Output As #ak
Print #ak, "Anzahl Zahlen: "; z
Print #ak, "Anzahl Übergänge: "; w
Print #ak, ""
For i = 1 To UBound(register)
With register(i)
Print #ak, "Nach "; NumLen(.vorher, 3); " folgt "; _
NumLen(.nachher, 3); " = "; NumLen(.anzahl, 3); "x, wenn "; _
NumLen(.vorher, 3) & " = " & NumLen(.freqvorher, 3) & "x bestanden" & _
"hat"
End With
Next i
Close #ak
End Sub
Private Sub QuickSort(Sort() As Wechsel2, ByVal Start%, ByVal Ende%)
Dim i%, j%
Dim h As Wechsel2
Dim x As Wechsel2
i = Start: j = Ende
x = Sort((Start + Ende) / 2)
' Array aufteilen
Do
While comparewechsel(Sort(i), x) < 0: i = i + 1: Wend
While comparewechsel(Sort(j), x) > 0: j = j - 1: Wend
If (i <= j) Then
' Wertepaare miteinander tauschen
h = Sort(i)
Sort(i) = Sort(j)
Sort(j) = h
i = i + 1: j = j - 1
End If
Loop Until (i > j)
If (Start < j) Then QuickSort Sort, Start, j
If (i < Ende) Then QuickSort Sort, i, Ende
End Sub
Private Function comparewechsel(w1 As Wechsel2, w2 As Wechsel2) As Integer
comparewechsel = 1
If w1.vorher > w2.vorher Then Exit Function
If w1.vorher = w2.vorher And _
w1.nachher > w2.nachher Then Exit Function
comparewechsel = 0
If w1.vorher = w2.vorher And _
w1.nachher = w2.nachher Then Exit Function
comparewechsel = -1
End Function
Beitrag wurde zuletzt am 31.03.14 um 09:01:07 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 31.03.14 20:38 |
| hallo Manfred,
oh ... schon fertig - super - habe keine Mail bekommen das ein neuer Beitrag
von dir da ist.
Habe es getestet - traumhaft - super - vielen vielen lieben Dank
Werde morgen dann mal alles ausarbeiten und damit fertigstellen.
Nochmals danke für deine Zeit !!!
Kussi
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.04.14 10:34 |
| hallo Manfred,
ich habe nun alles fertig eingearbeitet.
Läuft so wie es soll - großen lieben Dank an dich nochmals
Das Modul - was du geschrieben hast arbeitet ja derzeit wie folgt:
"Wie oft kommt welche Zahl in einem gewissen Zeitraum vor"
Könntest du bitte eine kleine Veränderung/Erweiterung vornehmen?
"Wie oft kommt welche Zahl in einem gewissen Zeitraum vor" = Soll so bleiben
"In welchen Abständen folgt die Zahl nochmals"
Beispiel:
Derzeit:
1 1
2 0
3 1
4 3
Die Zahl 4 kommt 3 mal vor
Aber in welchen Abständen?
Kommt sie z.B. in 3000 das erste mal
Kommt sie z.B. in 3005 das zweite mal
dann ist der Abstand 5 (3005-3000)
Kommt sie z.B. in 3012 das dritte mal
dann ist der Abstand 7 (3012-3005)
Ergebnis/=output Erweiterung: So eventuell
Zahl 4 = Abstand 5 - 1x
Zahl 4 = Abstand 7 - 1x
usw. mit allen Zahlen natürlich
Public Sub NumberFrequency _
(ByVal Filename, ByVal start As Integer, ByVal ende As Integer)
Dim ik As Integer, ak As Integer 'Kanäle
Dim line As String, fields() As String 'Dateizeile
Dim dateval As Integer 'Datum in Zeile
Dim i As Integer, k As Integer 'Loopings
Dim z As Integer ' Ziehungszähler
'Zeit-Intervall: Grenzen sicher stellen
If ende < start Then
i = start
start = ende
ende = i
End If
'Zählerregister
Dim frequency(49) as Integer
ik = FreeFile
Open Filename For Input As #ik
While Not EOF(ik)
Line Input #ik, line
'(numerische) Felder in einer Zeile
fields = Split(line, " ")
'Check
If Not UBound(fields) = 7 Then Stop
'Datumsfeld wandeln
dateval = CInt(fields(0))
'Zeitfilter setzen
If dateval >= start And dateval <= ende Then
'Häufigkeitszähler füllen
For i = 1 To 7
frequency(CInt(fields(i))) = frequency(CInt(fields(i))) + 1
Next i
z = z + 1
End If
Wend
Close #ik
ak = FreeFile
Open "C:\daten\numberfrequencies.txt" For Output As #ik
Print #ak, Filename
Print #ak, "Start: "; start
Print #ak, "Ende: "; ende
Print #ak, "Ziehungen: "; z
For i = 1 To 49
Print #ak, i, frequency(i)
Next i
Close #ak
End Sub
Aufruf der Routine:
Call NumberFrequency("C:\daten\sa-ziehungen.txt", 3050, 2999) Verständlich erklärt?
sa-ziehungen.txt
Vorab nochmals danke
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.04.14 12:01 |
| Option Explicit
Private Type NumberDistanceType
number As Integer
Position As Integer
Distance As Integer
End Type
Dim NumberRegister() As NumberDistanceType
Private Sub RegisterNumber(ByVal number As Integer, ByVal Position As Integer)
'Registrierung einer Zahl (Number) incl. zeilennummer (Position)
'und Ermittlung der Distanz zum vorherigen Auftreten dieser Zahl (
' Distance)
Dim i%, pos%, found As Boolean
For i = UBound(NumberRegister) To 0 Step -1
If NumberRegister(i).number = number Then
found = True: pos = NumberRegister(i).Position
Exit For
End If
Next i
i = UBound(NumberRegister) + 1
ReDim Preserve NumberRegister(i)
With NumberRegister(i)
.number = number
.Position = Position
If found Then
.Distance = Position - pos
End If
End With
End Sub
Private Function NumLen(ByVal number As Integer, _
minlen As Integer) As String
NumLen = CStr(number)
While Len(NumLen) < minlen
NumLen = " " & NumLen
Wend
End Function
Public Sub NumberDistance(ByVal file_in As String, _
ByVal Start As Integer, ByVal Ende As Integer, _
ByVal file_out As String)
Dim ik%, ak% 'Kanäle
Dim line As String, fields() As String 'Dateizeile
Dim dateval% 'Datum in Zeile
Dim number As Integer
Dim i As Integer, k As Integer 'Loopings
Dim z As Integer ' Ziehungszähler
'Zeit-Interval sicher stellen
If Ende < Start Then
i = Start
Start = Ende
Ende = i
End If
ReDim NumberRegister(0)
ik = FreeFile
Open file_in For Input As #ik
While Not EOF(ik)
Line Input #ik, line
z = z + 1
'numerische Felder in einer Zeile
fields = Split(line, " ")
'Check
If Not UBound(fields) = 7 Then Stop
'Datumsfeld
dateval = CInt(fields(0))
'Zeitfilter
If dateval >= Start And dateval <= Ende Then
'Häufigkeitszähler füllen
For i = 1 To 7
number = CInt(fields(i))
If number > 0 Then
Call RegisterNumber(CInt(fields(i)), z)
End If
Next i
End If
Wend
Close #ik
QuickSort NumberRegister, 0, UBound(NumberRegister)
ak = FreeFile
Open file_out For Output As #ak
Print #ak, file_in
Print #ak, "von "; Start; " bis "; Ende
Print #ak, "Gelesene Zeilen: "; z
Print #ak, "Registrierte Zahlen: "; UBound(NumberRegister)
Print #ak, ""
For i = 1 To UBound(NumberRegister)
With NumberRegister(i)
Print #ak, NumLen(.Position, 3); ".) Zahl: "; NumLen(.number, 3);
If .Distance > 0 Then
Print #ak, " Distanz: "; NumLen(.Distance, 3)
Else
Print #ak, ""
End If
End With
Next i
Close #ak
End Sub
Private Sub QuickSort(Sort() As NumberDistanceType, ByVal Start%, ByVal Ende%)
Dim i%, j%
Dim h As NumberDistanceType
Dim x As NumberDistanceType
i = Start: j = Ende
x = Sort((Start + Ende) / 2)
Do
While comparend(Sort(i), x) < 0: i = i + 1: Wend
While comparend(Sort(j), x) > 0: j = j - 1: Wend
If (i <= j) Then
h = Sort(i)
Sort(i) = Sort(j)
Sort(j) = h
i = i + 1: j = j - 1
End If
Loop Until (i > j)
If (Start < j) Then QuickSort Sort, Start, j
If (i < Ende) Then QuickSort Sort, i, Ende
End Sub
Private Function comparend(w1 As NumberDistanceType, w2 As NumberDistanceType) _
As Integer
comparend = 1
If w1.number > w2.number Then Exit Function
If w1.number = w2.number And _
w1.Position > w2.Position Then Exit Function
comparend = 0
If w1.number = w2.number And _
w1.Position = w2.Position Then Exit Function
comparend = -1
End Function | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.04.14 14:15 |
| hallo Manfred,
doch schon wieder so ein Aufwand - ich verschätze mich da doch sehr!
Danke Kussi
Call NumberDistance("C:\daten\sa-ziehungen.txt", 3052, 2999, _
"C:\daten\sa-Ergebnis.txt") Danach kommt die Fehlermeldung:
"Fehler beim Kompilieren: Benutzerdefinierter Typ nicht defeniert"
Private Sub QuickSort(Sort() As NumberDistanceType, ByVal Start%, ByVal Ende%) LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.04.14 16:00 |
| Das scheint das gleiche Problem zu sein, das neulich bereits
bei Dir aufgetreten ist - erstelle ein neues Projekt und kopiere den
gersamten Code in Form1.
Es funktioniert aber auch, wenn der Code in ein Modul kopiert wird
und die Routine "NumberDistance" von einem Formular gerufen wird.
(Kombiniere diesen Code nicht mit anderem Code innerhalb einer Code-Datei.)
Der Aufruf:
Private Sub Form_Load()
Call NumberDistance("C:\daten\sa-ziehungen.txt", 3052, 2999, _
"C:\daten\sa-Ergebnis.txt")
End Sub Das Ergebnis sollte etwa so aussehen:
C:\daten\sa-ziehungen.txt
von 2999 bis 3052
Gelesene Zeilen: 101
Registrierte Zahlen: 317
57.) Zahl: 1
72.) Zahl: 1 Distanz: 15
85.) Zahl: 1 Distanz: 13
57.) Zahl: 2
59.) Zahl: 2 Distanz: 2
71.) Zahl: 2 Distanz: 12
54.) Zahl: 3
56.) Zahl: 3 Distanz: 2
58.) Zahl: 3 Distanz: 2
60.) Zahl: 3 Distanz: 2
64.) Zahl: 3 Distanz: 4
65.) Zahl: 3 Distanz: 1
66.) Zahl: 3 Distanz: 1
69.) Zahl: 3 Distanz: 3
76.) Zahl: 3 Distanz: 7
77.) Zahl: 3 Distanz: 1
100.) Zahl: 3 Distanz: 23
usw.
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.04.14 19:47 |
| hallo Manfred,
habe wieder von euch keine e-Mail bekommen das ein neuer Beitrag da ist
Das war nun schon das 2x !!!
So - ich habe heute mittag schon ein neues Projekt angelegt habe mir schon so etwas
gedacht.
Aber ich kann machen was ich will bleibt immer bei der gleichen Fehlermeldung hängen.
Egal was ich mache - es geht nicht
Ich habe keine Ahnung was ich noch machen soll
Schaue mal nach:
Ang.1.7z
LG
Angelina
Beitrag wurde zuletzt am 07.04.14 um 19:57:31 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 07.04.14 20:11 |
| [I]Hallo Manfred,
habe wieder von euch keine e-Mail bekommen das ein neuer Beitrag da ist
Das war nun schon das 2x !!![/I]
Da mußt Du Dich bei der Redaktion des VB@Rchiv beschweren.
Ich habe damit absolut nichts zu tun - bin hier bloß ein gelegentlicher Gast.
Vermutlich ist dieser Thread inzwischen zu umfangreich geworden ....
Die Deklaration des Typs muß am Anfang der Code-Datei stehen,
dann läuft es problemlos .... (Form_Load ist ein vorgegebener Name
für die Eventhandler-Routine !!!)
Option Explicit
Private Type NumberDistanceType
number As Integer
Position As Integer
Distance As Integer
End Type
Dim NumberRegister() As NumberDistanceType
Private Sub Form_Load()
Call NumberDistance("C:\daten\sa-ziehungen.txt", 3052, 2999, _
"C:\daten\sa-Ergebnis.txt")
End Sub
'usw. Erklärung:
[I][B]Type[/B] wird auf Modulebene verwendet, um einen benutzerdefinierten
Datentyp mit einem oder mehreren Elementen zu definieren.
[B]Modulebene[/B] beschreibt den Code in dem Deklarationsabschnitt eines Moduls.
Jeder Code außerhalb einer Prozedur verweist auf Modulebenen-Code.
Deklarationen müssen zuerst aufgelistet werden, danach folgen die Prozeduren.[/I]
Wie die Abfolge der gelisteten Distanzen zwischen dem Auftreten der
einzelnen Zahlen in Häufigkeiten umzurechnen ist, wäre zu klären
(mit oder ohne Beachtung der Reihenfolge).
Beitrag wurde zuletzt am 07.04.14 um 20:23:51 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 07.04.14 20:28 |
| hallo,
ok - läuft !!!
Wie die Abfolge der gelisteten Distanzen zwischen dem Auftreten der
einzelnen Zahlen in Häufigkeiten umzurechnen ist, wäre zu klären
(mit oder ohne Beachtung der Reihenfolge).
Melde mich morgen nochmals - bin schon zu spät muß ins Krankenhaus ... arbeiten
Kussi
LG
Angelina | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 08.04.14 11:48 |
| hallo Manfred,
getestet und perfekt so !!!
Ich erstelle mit diesem VB-Code alle 6er-Kombis 6aus49 die es gibt
sind somit 13983816 Kominationen zu 6 Zahlen. Das ist soweit bekannt.
Nicht schön - aber es läuft
Dim out As Integer
Dim i1%, i2%, i3%, i4%, i5%, i6%
out = FreeFile
Open ("C:\daten\6er-Kombis.txt") For Output As out
'Die Motorzahlen als Feld erstellen
Dim mot(13983816, 6) As Integer
zw = 0
For i1 = 1 To 44
s21 = i1 + 1
For i2 = s21 To 45
s31 = i2 + 1
For i3 = s31 To 46
s41 = i3 + 1
For i4 = s41 To 47
s51 = i4 + 1
For i5 = s51 To 48
s61 = i5 + 1
For i6 = s61 To 49
zw = zw + 1
mot(zw, 1) = i1
mot(zw, 2) = i2
mot(zw, 3) = i3
mot(zw, 4) = i4
mot(zw, 5) = i5
mot(zw, 6) = i6
ff:
Next i6, i5, i4, i3, i2, i1
zw = 0
mot:
zw = zw + 1
If mot(zw, 1) = 0 Then GoTo motaus
i1 = mot(zw, 1)
i2 = mot(zw, 2)
i3 = mot(zw, 3)
i4 = mot(zw, 4)
i5 = mot(zw, 5)
i6 = mot(zw, 6)
Print #out, i1; ","; i2; ","; i3; ","; i4; ","; i5; ","; i6
GoTo mot
motaus:
Close #out Was würde ich gerne in diesen VB-Code einbinden?
Jeder Zahl von 1 bis 49 möchte ich gerne einen Wert zuordnen.
Beispiel:
Der VB-Code erstellt die 6er-Kombi
1,2,3,4,5,6
Ich habe der
Zahl 1 den Wert gegeben von 36
Zahl 2 den Wert gegeben von 5
Zahl 3 den Wert gegeben von 4
Zahl 4 den Wert gegeben von 0
Zahl 5 den Wert gegeben von 5
Zahl 6 den Wert gegeben von 1
Liegt die Quersumme der Werte 36+5+4+0+5+1 = 51
zwischen 50 und 51 dann ist diese 6er-Kombi 1,2,3,4,5,6 gut
und kommt in die output Datei, wenn nicht wird sie verworfen.
Also muß ich vorher jeder Zahl von 1-49 die Werte zuteilen.
Diese Werte können von 0 bis 50 sein.
Da die output Datei nach diesem Durchlauf doch viele 6er-Kombis enthalten wird
soll anschließend ermittelt werden wie oft welche Zahl in der output Datei
vorhanden ist. Fertig!
Könntest du eventuell noch diesen VB-Code von mir dahin verändern das dies
möglich ist?
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 08.04.14 14:05 |
| Hallo!
Ich fürchte, ich verstehe nichts.
Wie kann eine Summe aus ganzen Zahlen zwischen 50 und 51 liegen?
Meinst Du, sie soll entweder 50 oder 51 sein?
Handelt es sich bei den zugeordneten Werten um Gewichts-Faktoren?
Weißt Du, was eine Quersumme ist?
https://de.wikipedia.org/wiki/Quersumme
Schreibe die 49 Gewichte in eine Textdatei "gewichte.txt"
Der zulässige Bereich der Gewichte-Summen ist in den
Variablen "qs_min" und "qs_max" anzugeben.
Die Häufigkeit der einzelnen ausgegebenen Zahlen
steht nach erfolgreichem Durchlauf im Array "freq".
Option Explicit
Private Sub Form_Load()
'49 Gewichte einlesen
Dim z(1 To 49) As Integer, ii%
Dim ik%: ik = FreeFile
Open "C:\daten\gewichte.txt" For Input As #ik
For ii = 1 To 49
Input #ik, z(ii)
Next ii
Close #ik
'Grenzen der gültigen Quersumme hier angeben
Const qs_min% = 50
Const qs_max% = 51
Dim ak%: ak = FreeFile
Open "C:\daten\SechserFolgen.txt" For Output As #ak
Dim i%, j%, k%, l%, m%, n%
Dim qs%, zz As Long, sum As Long
Dim freq(1 To 49) As Long
For i = 1 To 44
For j = i + 1 To 45
For k = j + 1 To 46
For l = k + 1 To 47
For m = l + 1 To 48
For n = m + 1 To 49
'Summe der Gewichte
qs = z(i) + z(j) + z(k) + z(l)
qs = qs + z(m) + z(n)
zz = zz + 1
'Gewichte-Summe im gültigen Bereich ?
If qs >= qs_min And qs <= qs_max Then
'Reihe ausgeben
Print #ak, i, j, k, l, m, n
'Häufigkeit der Zahlen
freq(i) = freq(i) + 1
freq(j) = freq(j) + 1
freq(k) = freq(k) + 1
freq(l) = freq(l) + 1
freq(m) = freq(m) + 1
freq(n) = freq(n) + 1
'Ausgegebene Reihen
sum = sum + 1
End If
Next n, m, l, k, j, i
Close #ak
End Sub | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 08.04.14 17:10 |
| hallo Manfred,
sorry das ich mich umständlich/falsch ausgedrückt habe.
Du hast es aber perfekt gelöst, so wie das Dummerchen es meinte
Ausgabe Array "freq" habe ich so gemacht - ok so ... ?
'Häufigkeit der Zahlen
freq(i) = freq(i) + 1
freq(j) = freq(j) + 1
freq(k) = freq(k) + 1
freq(l) = freq(l) + 1
freq(m) = freq(m) + 1
freq(n) = freq(n) + 1
'Ausgegebene Reihen
sum = sum + 1
End If
Next n, m, l, k, j, i
Print #ak, ""
Print #ak, "Anzahl 6er-Kombis = "; sum
Print #ak, ""
Print #ak, "Zahl 01 = "; freq(1)
Print #ak, "Zahl 02 = "; freq(2)
Print #ak, "Zahl 03 = "; freq(3)
Print #ak, "Zahl 04 = "; freq(4)
Print #ak, "Zahl 05 = "; freq(5)
Print #ak, "Zahl 06 = "; freq(6)
Print #ak, "Zahl 07 = "; freq(7)
Print #ak, "Zahl 08 = "; freq(8)
Print #ak, "Zahl 09 = "; freq(9)
Print #ak, "Zahl 10 = "; freq(10)
Print #ak, "Zahl 11 = "; freq(11)
Print #ak, "Zahl 12 = "; freq(12)
Print #ak, "Zahl 13 = "; freq(13)
Print #ak, "Zahl 14 = "; freq(14)
Print #ak, "Zahl 15 = "; freq(15)
Print #ak, "Zahl 16 = "; freq(16)
Print #ak, "Zahl 17 = "; freq(17)
Print #ak, "Zahl 18 = "; freq(18)
Print #ak, "Zahl 19 = "; freq(19)
Print #ak, "Zahl 20 = "; freq(20)
Print #ak, "Zahl 21 = "; freq(21)
Print #ak, "Zahl 22 = "; freq(22)
Print #ak, "Zahl 23 = "; freq(23)
Print #ak, "Zahl 24 = "; freq(24)
Print #ak, "Zahl 25 = "; freq(25)
Print #ak, "Zahl 26 = "; freq(26)
Print #ak, "Zahl 27 = "; freq(27)
Print #ak, "Zahl 28 = "; freq(28)
Print #ak, "Zahl 29 = "; freq(29)
Print #ak, "Zahl 30 = "; freq(30)
Print #ak, "Zahl 31 = "; freq(31)
Print #ak, "Zahl 32 = "; freq(32)
Print #ak, "Zahl 33 = "; freq(33)
Print #ak, "Zahl 34 = "; freq(34)
Print #ak, "Zahl 35 = "; freq(35)
Print #ak, "Zahl 36 = "; freq(36)
Print #ak, "Zahl 37 = "; freq(37)
Print #ak, "Zahl 38 = "; freq(38)
Print #ak, "Zahl 39 = "; freq(39)
Print #ak, "Zahl 40 = "; freq(40)
Print #ak, "Zahl 41 = "; freq(41)
Print #ak, "Zahl 42 = "; freq(42)
Print #ak, "Zahl 43 = "; freq(43)
Print #ak, "Zahl 44 = "; freq(44)
Print #ak, "Zahl 45 = "; freq(45)
Print #ak, "Zahl 46 = "; freq(46)
Print #ak, "Zahl 47 = "; freq(47)
Print #ak, "Zahl 48 = "; freq(48)
Print #ak, "Zahl 49 = "; freq(49)
Close #ak Leider habe ich etwas vergessen zu schreiben.
Ich versuche es mal auszudrücken:
In der gewichte.txt habe ich ja die 49 Werte/Gewichte eingetragen.
Es kommt jedoch vor, das manche Werte mehrfach darin vorkommen.
Die 6er-Kombis die erstellt werden, sollen jedoch aus 6 unterschiedlichen
Werten bestehen.
Also Beispiel:
2,3,4,5,6,7
hat die Werte aus der (gewichte.txt)von
1+5+4+0+5+1 = 16
Da hier der Wert 5 mehrfach vorhanden ist - wird diese nicht (n i c h t) gespeichert.
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Blackbox | Datum: 08.04.14 17:53 |
| Hallo,
sei gewiß: Wenn man die Lottozahlen tatsächlich proggen könnte, wäre das Glücksspiel längst nicht mehr am laufen. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 08.04.14 18:00 |
| Blackbox schrieb:
Zitat: | | Hallo,
sei gewiß: Wenn man die Lottozahlen tatsächlich proggen
könnte, wäre das Glücksspiel längst nicht mehr am
laufen. | |
Hallo Blackbox,
ja - ist mir schon bekannt.
Zumindestens scheint es doch viele hier zu interessieren.
Gruß
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 08.04.14 20:28 |
| Die Aufgabe, Zahlenreihen mit mehrfach vorkommenden Gewichten zu filtern,
erledigt die zusätzliche Routine "UniqueValues":
Private Function UniqueValues(z%(), i%, j%, k%, l%, m%, n%) As Boolean
'gelten für die Zahlenreihe i,j, ..n einheitliche Gewichte in z
'Array mit den Gewichten der Zahlenfolge erstellen
Dim g(1 To 6) As Integer, ii%, kk%
g(1) = z(i): g(2) = z(j): g(3) = z(k)
g(4) = z(l): g(5) = z(m): g(6) = z(n)
UniqueValues = False
For ii = 1 To 5
For kk = ii + 1 To 6
'doppeltes Gewicht gefunden
If g(ii) = g(kk) Then Exit Function
Next kk
Next ii
UniqueValues = True 'keine mehrfach vorkommenden Gewichte
End Function Der zu ersetzende Code-Block mit der zusätzlichen Bedingung:
If UniqueValues(z(), i, j, k, l, m, n) Then
'Summe der Gewichte
qs = z(i) + z(j) + z(k) + z(l)
qs = qs + z(m) + z(n)
'Gewichte-Summe im gültigen Bereich ??
If qs >= qs_min And qs <= qs_max Then
Print #ak, i, j, k, l, m, n
freq(i) = freq(i) + 1
freq(j) = freq(j) + 1
freq(k) = freq(k) + 1
freq(l) = freq(l) + 1
freq(m) = freq(m) + 1
freq(n) = freq(n) + 1
sum = sum + 1
End If
End If | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Franki | Datum: 09.04.14 00:55 |
| Wenn man die Lottozahlen programmieren könnte, wäre es ja kein Glücksspiel, und Glück kann man halt nicht programmieren.
Aber vielleicht schafft es ja doch jemand, kassiert den Mega-Gewinn und danach gibt es Lotto nicht mehr...
Aber ich glaube, dass selbst wenn jemand tatsächlich diese Fähigkeit hätte, er seine Kenntnisse nicht in ein Lotto Programm investieren würde.
Gruß
Frank
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Franki | Datum: 09.04.14 01:00 |
| Na ja, so viele Leute beteiligen sich ja nicht an diesem Thread.
Aber der Betreff und was da von Manfred und dir an Code kommt hat ja eigentlich nichts mit Lotto an sich zu tun. Das ist ein Beispiel wie man ein Programmierproblem (was es durchaus auch in anderen Bereichen mit vergleichbaren DAten gibt) evtl. lösen kann.
Deswegen ist der Thread interessant meiner Meinung nach.
Aber wiech schon geschrieben, ich finde es gut, dass du was lernst und dein Vater dieses Hobby hat.
Gruß
Frank
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 09.04.14 07:40 |
| Hallo!
Ich verwende Vb6 seit 8 (acht) Jahren nicht mehr.
Der gepostete Code ist schnell zusamengebastelt worden,
zudem ohne genaue Kenntnis der zu realisierenden Zielsetzung.
In VB.Net ließe sich die Angelegenheit mit maximal einem
Drittel der Code-Menge realisieren (Methoden der generischen Liste,
Dictionaries, IO.File etc.).
Interessant oder beispielhaft ist hier nichts !!!
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 09.04.14 12:29 |
| hallo Manfred,
trotzdem danke das du dir die Zeit genommen hast
auch wenn es für dich nicht interessant oder beispielhaft ist.
Beispiel:
Eine Runde auf dem Sportplatz hat 400 meter
Wenn du 363 meter gelaufen bist ist dein Ziel noch 37 meter entfernt.
Wenn du 357 meter gelaufen bist ist dein Ziel noch 43 meter entfernt.
Ebenso wenn du noch 38 oder 42 meter zu laufen hast!!!
Strecke die zu laufen ist = 400 meter
abzüglch der Strecke die du schon gelaufen hast.
So sinnbildlich ist der Ansatz.
Am kommenden Wochenende Samstag, 12.04.2014 könnte dieser Ansatz passen.
Wir rechnen/überprüfen das dann mal am Sonntag
Zu den Gewinnzahlen gehören diese Werte.
kommen die Tage noch ...
LG
Angelina
Beitrag wurde zuletzt am 09.04.14 um 12:30:56 editiert. | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 09.04.14 19:18 |
| hallo Manfred,
Manfred X schrieb:
Zitat: | |
Schreibe die 49 Gewichte in eine Textdatei "gewichte.txt"
Der zulässige Bereich der Gewichte-Summen ist in den
Variablen "qs_min" und "qs_max" anzugeben.
| |
gibt es eine Möglichkeit kleine Veränderungen zu machen?
1.
In der "gewichte.txt" stehen bekanntlich die 49 Werte
dies ist auch perfekt so.
Könnte man in dieser Datei vielleicht Gewichte kennzeichnen
die in jeder der 6er-Kombination vorhanden sein müssen?
Beispiel:
17
20
25
0
1
12
10
usw.
ich würde dann z.B.die 17 mit einem * kennzeichnen
und dieser Wert/Gewicht sollte in jeder 6er-Kombi vorhanden sein.
Kennzeichne ich z.B.
die 17* und die 1* und die 10* dann muss mindestens einer dieser Werte
in der 6er-Kombi vorhanden sein.
2.
Variablen "qs_min" und "qs_max"
kann ich derzeit (so wie von mir gewollt) nur einen Bereich von min bis max
angeben. Gibt es auch hier die Möglichkeit mehrer min und max Bereiche zu erfassen?
Beispiel:
Const qs_A-min% = 40
Const qs_A-max% = 41
Const qs_B-min% = 43
Const qs_B-max% = 44
Const qs_C-min% = 12
Const qs_C-max% = 14
Const qs_D-min% = 17
Const qs_D-max% = 18
Sollte ich doch nur ein oder zwei davon benötigen dann würde
ich die nicht benötigten so kennzeichnen:
'Const qs_A-min% = 40
'Const qs_A-max% = 41
Wie gesagt nur wenn du mal wieder Lust und Zeit dafür hättest.
LG
Angelina
| |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: Manfred X | Datum: 10.04.14 08:39 |
| Die Routine "CreateSeries" benötigt vier Parameter (=Dateinamen).
Die erste Datei enthält 49 zahlenbezogene Gewichte und dahinter ggf. ein Stern *
Die zweite Datei enthält die gültigen Bereiche für die Gewichte-Summe, z.B.
40,41
43,44
12,14
17,18
Die weiteren Dateien sind für die Ausgabe (Reihen und Häufigkeiten).
Public Sub CreateSeries(ByVal file_weights$, ByVal file_areas$, _
ByVal file_seriesout$, ByVal file_freqout$)
Dim weights%(), musts%()
Call ReadWeights(file_weights, weights, musts)
Dim ug%(), og%()
Call ReadAreas(file_areas, ug, og)
Dim i%, j%, k%, l%, m%, n%
Dim sum As Long, wsum%
Dim freq(1 To 49) As Long
Dim seriesweights%()
Dim ak%: ak = FreeFile
Open file_seriesout For Output As #ak
For i = 1 To 44
For j = i + 1 To 45
For k = j + 1 To 46
For l = k + 1 To 47
For m = l + 1 To 48
For n = m + 1 To 49
seriesweights = GetWeights(weights, i, j, k, l, m, n, _
wsum)
If InArea(ug(), og(), wsum) Then
'Gewichte-Summe im gültigen Bereich
If ContainsMust(seriesweights, musts) And _
UniqueValues(seriesweights) Then
Print #ak, i; j; k; l; m; n
freq(i) = freq(i) + 1
freq(j) = freq(j) + 1
freq(k) = freq(k) + 1
freq(l) = freq(l) + 1
freq(m) = freq(m) + 1
freq(n) = freq(n) + 1
sum = sum + 1
End If
End If
Next n, m, l, k, j, i
Close #ak
ak = FreeFile
Open file_freqout For Output As #ak
Print #ak, "Gewichte in: "; file_weights
Print #ak, "Bereiche in: "; file_areas
Print #ak, "Serien in: "; file_seriesout
Print #ak, "Ausgegebene Serien: "; sum
Print #ak, "Zahlen-Häufigkeiten in Serien: "
For i = 1 To 49
Print #ak, "Zahl: " & CStr(i); " --> "; freq(i)
Next i
Close #ak
End Sub
Private Sub ReadWeights(ByVal filename$, ByRef weights%(), ByRef musts%())
Dim i%, k%, ik%, line$
ReDim weights(1 To 49)
ReDim musts(0)
ik = FreeFile
Open filename For Input As ik
For i = 1 To 49
Line Input #ik, line
weights(i) = Val(line)
If InStr(line, "*") > 0 Then
k = UBound(musts) + 1
ReDim Preserve musts(k)
musts(k) = weights(i)
End If
Next i
Close #ik
End Sub
Private Sub ReadAreas _
(ByVal filename$, ByRef ug() As Integer, ByRef og() As Integer)
Dim i%, k%, ik%, line$
ReDim ug(0), og(0)
Dim area() As String
ik = FreeFile
Open filename For Input As ik
While Not EOF(ik)
Line Input #ik, line
area = Split(line, ",")
k = UBound(ug) + 1
ReDim Preserve ug(k)
ReDim Preserve og(k)
ug(k) = Val(area(0))
og(k) = Val(area(1))
Wend
Close #ik
End Sub
Private Function GetWeights _
(weights%(), i%, j%, k%, l%, m%, n%, ByRef wsum%) As Integer()
Dim ii%
'Array mit den Gewichten der Zahlenfolge erstellen
Dim g(1 To 6) As Integer
g(1) = weights(i): g(2) = weights(j): g(3) = weights(k)
g(4) = weights(l): g(5) = weights(m): g(6) = weights(n)
wsum = 0
For ii = 1 To 6
wsum = wsum + g(ii)
Next ii
GetWeights = g
End Function
Private Function ContainsMust(seriesweights%(), musts%()) As Boolean
Dim ii%, kk%
ContainsMust = True
If UBound(musts) = 0 Then Exit Function
For ii = 1 To UBound(musts)
For kk = 1 To 6
If musts(ii) = seriesweights(kk) Then Exit Function
Next kk
Next ii
ContainsMust = False
End Function
Private Function UniqueValues(seriesweights%()) As Boolean
Dim ii%, kk%
UniqueValues = False
For ii = 1 To 5
For kk = ii + 1 To 6
'doppeltes Gewicht gefunden
If seriesweights(ii) = seriesweights(kk) Then Exit Function
Next kk
Next ii
UniqueValues = True
End Function
Private Function InArea(ug%(), og%(), gsum%) As Boolean
Dim i%
InArea = True
For i = 1 To UBound(ug)
If gsum >= ug(i) And gsum <= og(i) Then Exit Function
Next i
InArea = False
End Function | |
Re: Zeilen mit Kombinationen vergleichen ??? | | | Autor: JBL | Datum: 21.04.14 11:23 |
| hallo Manfred,
sorry hatte vergessen zu schreiben das ich paar Tage in Urlaub bin.
Bin wieder da - wünsche dir/euch noch
Frohe Ostern
danke nochmals für deine zahlreiche Hilfe !!!
LG
Angelina | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|