vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Zeilen 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?















Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
















Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilen mit Kombinationen vergleichen ??? 
Autor: Blackbox
Datum: 07.03.14 18:44

Hey

warum löst Ihr eigentlich Eure Schulaufgaben nicht allein?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 !!!!


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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")
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?





Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 ....


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilen mit Kombinationen vergleichen ??? 
Autor: Manfred X
Datum: 30.03.14 20:13

Welche VB-Version verwendest Du? VB6?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilen mit Kombinationen vergleichen ??? 
Autor: JBL
Datum: 31.03.14 05:42

hallo Manfred,

ja habe VB6


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 !!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel