vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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
Re: Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 13:30

Buh.
Die für Deine Zwecke angepasste Routine "Nueberk_Output" steht hier

Wenn Du Dir nicht klar machst, wie dieser Code aufgebaut ist und funktioniert
hat alle Mühe keinen Sinn.

Antworten in solchen Foren sollen Hinweise geben, wie man weiterkommen kann.
Diese Postings sind normalerweise so gestaltet, daß auch interessierte Mitlesende
daraus Nutzen ziehen können.

Deine Vorstellung ist absurd: Kopieren - Übersetzen - Starten - Problem ist gelöst.

Du sollst Programmieren lernen und üben.
Ich kann es schon einigermaßen.

Wenn Du Programmieraufträge erteilen willst, kannst Du Dein Problem im
Forum "Jobs Suche / Gesuche" schildern.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 16.02.15 19:11

hallo,

habe mit meinem kleinen Projekt eine - für mich - unlösbare Aufgabe.

Ich habe mal die Input- und Output-Datei zum Download in die Dropbox geladen.

https://www.dropbox.com/s/ihq1fup62zqn583/Angelina.zip?dl=0

Es geht um folgendes:

Die Input-Datei schaut so aus
3096 12
3096 14
3096 39
3096 46
3096 50
3097 1
3097 6
3097 12
3097 39
usw.
usw.

Es sollen nun alle 2-er-Kombinationen gebildet werden.
Also so - immer in Abhängigkeit der zugehörigen Gruppe

Zur Gruppe 3096 sind es diese Kombinationen

12 14
12 39
12 46
12 50
14 39
14 46
14 50
39 46
39 50
46 50

Zur Gruppe 3097 sind es diese Kombinationen

1 6
1 12
1 39
6 12
6 39
12 39

Die Original Datei hat ca. 100.000 Input Zeilen

Der Output sollte absteigen sortiert sein
"Häufigkeit" welche 2er-Kombination wie oft
Jedoch sehr wichtig ist, das die Gruppen in der
Output Datei mit genannt werden.

So z.B.
12 39 Häufigkeit 2
3096
3097
usw.
usw.


Würde mir bitte jemand dabei helfen?
Ich bekomme das einfach nicht hin.

Danke für jede Hilfe

Gruß
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: Manfred X
Datum: 17.02.15 06:33

Hallo!

Die Aussage "Ich bekomme das einfach nicht hin" beschreibt
keine konkrete Fragestellung zu VB.
Man müßte wissen, wie Du vorgegangen bist und an welchem Punkt Du hängst.

Die Fragestellung ist auch nicht völlig klar.
Können negative Werte auftreten?
Können Werte innerhalb einer Gruppe mehrfach vorkommen?
Können die Ausgangsdaten in der Datei als irgendwie vorsortiert angenommen werden?

Vielleicht helfen diese Routinen weiter (1. Teil einer Form)
Option Explicit
 
Private Type Line
    Group As Integer
    Value As Integer
End Type
 
Private Type Kombi
    Group As Integer
    V1() As Integer
    V2() As Integer
End Type
 
Private Type Freq
    V1 As Integer
    V2 As Integer
    groups() As Integer
End Type
 
 
Dim Lines() As Line, kombis() As Kombi, Freqs() As Freq
 
 
Private Sub Form_Load()
 
   'Daten-Liste lesen
   ReadLines "C:\Daten\input.txt" 'Datei angeben
 
   'Liste der Gruppen erstellen (incl. Wertearray für jede Gruppe)
   SetLinesToKombis
 
   'Liste der Werte-Kombinationen bei jeder Gruppe (Gruppe -> Kombis)
   SetKombisInGroups
 
   'Liste Umsetzen: Gruppe -> Kombis nach Kombi -> Gruppen
   FillKombiGroupsList
 
   'Sortieren der Werte-Kominationen nach Anzahl Gruppen pro Kombi. / fallend
   SortKombiGroupsList
 
   'Liste ausgeben
   WriteKombiGroupsList "C:\daten\output.txt" 'Ausgabedatei angeben
 
End Sub
 
 
Sub ReadLines(file_in As String)
 
    Dim i&, k&, ln$, f$()
    Open file_in For Input As #1
 
    While Not EOF(1)
        i = i + 1
        Line Input #1, ln
    Wend
    Close #1
 
    ReDim Lines(i)
    i = 0
    Open file_in For Input As #1
    While Not EOF(1)
        i = i + 1
        Input #1, ln
        f = Split(ln, Chr(9)) '?????? Tab
        'Oder:
        ln = Replace(ln, "  ", " ")
        f = Split(ln, " ")
        Lines(i).Group = CInt(Trim(f(0)))
        Lines(i).Value = CInt(Trim(f(1)))
    Wend
    Close #1
End Sub
 
 
Sub SetLinesToKombis()
 
    Dim i&, k&, l&, foundg As Boolean, foundv As Boolean
    ReDim kombis(0)
 
    For i = 1 To UBound(Lines)
 
        'Gruppe suchen
        foundg = False
        For k = 1 To UBound(kombis)
           foundg = kombis(k).Group = Lines(i).Group
 
           If foundg Then
 
              'Wert in Gruppenliste ergänzen
              With kombis(k)
                foundv = False
                For l = 1 To UBound(.V1)
                   foundv = .V1(l) = Lines(i).Value
                   If foundv Then Exit For
                Next l
                'Wert in Gruppenliste anhängen
                If Not foundv Then
                   l = UBound(.V1) + 1
                   ReDim Preserve .V1(l)
                   .V1(l) = Lines(i).Value
                End If
              End With
              Exit For
 
           End If
 
        Next k
 
        If Not foundg Then
 
           'Gruppe in Gruppenliste anhängen
           l = UBound(kombis) + 1
 
           ReDim Preserve kombis(l)
           With kombis(l)
              'Wertliste für neue Gruppe starten
              .Group = Lines(i).Group
              ReDim Preserve .V1(1)
              .V1(1) = Lines(i).Value
           End With
 
        End If
    Next i
 
End Sub


Beitrag wurde zuletzt am 17.02.15 um 07:02:44 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (2.Teil) 
Autor: Manfred X
Datum: 17.02.15 06:35

Sub SetKombisInGroups()
 
   Dim i&, k&, l&, m&, gv&()
   For i = 1 To UBound(kombis)
      With kombis(i)
          'Werteliste der Gruppe lesen
          ReDim gv(UBound(.V1))
          For k = 1 To UBound(.V1)
             gv(k) = .V1(k)
          Next k
 
          'Werte-Kombinationen (Paarungen) in Listen der Gruppe eintragen
          m = UBound(.V1)
          ReDim .V1((m ^ 2 - m) / 2)
          ReDim .V2(UBound(.V1))
          m = 0
          For k = 1 To UBound(gv) - 1
             For l = k + 1 To UBound(gv)
                 m = m + 1
                 .V1(m) = gv(k)
                 .V2(m) = gv(l)
             Next l
          Next k
      End With
   Next i
End Sub
 
 
Private Sub FillKombiGroupsList()
 
   Dim i&, k&, l&, m&, n&, foundk, foundg As Boolean
   ReDim Freqs(0)
 
   For i = 1 To UBound(kombis)
       'Schleife über Gruppen
       With kombis(i)
           'Schleife über Wertepaare in Gruppe
           For k = 1 To UBound(.V1)
              foundk = False
              For l = 1 To UBound(Freqs)
                  'Wertepaarung suchen
                  If Freqs(l).V1 = .V1(k) And _
                     Freqs(l).V2 = .V2(k) Then
                     'Bei Wertepaarung eine zugehörige Gruppe anhängen
                     foundk = True
                     n = UBound(Freqs(l).groups) + 1
                     ReDim Preserve Freqs(l).groups(n)
                     Freqs(l).groups(n) = .Group
                     Exit For
                  End If
              Next l
              If Not foundk Then
                 'Wertepaarung anhängen
                 l = UBound(Freqs) + 1
                 ReDim Preserve Freqs(l)
                 Freqs(l).V1 = .V1(k): Freqs(l).V2 = .V2(k)
                 ReDim Freqs(l).groups(1)
                 Freqs(l).groups(1) = kombis(i).Group
              End If
           Next k
       End With
   Next i
End Sub
 
 
Private Sub SortKombiGroupsList()
 
   'nach Häufigkeiten (= Anzahl Gruppen) fallend sortieren
   Dim i%, k%, f As Freq
   For i = 1 To UBound(Freqs) - 1
      For k = i + 1 To UBound(Freqs)
         If UBound(Freqs(i).groups) < UBound(Freqs(k).groups) Then
            f = Freqs(i)
            Freqs(i) = Freqs(k)
            Freqs(k) = f
         End If
      Next k
   Next i
End Sub
 
 
Private Sub WriteKombiGroupsList(file_out As String)
   Dim i%, k%
 
   Open file_out For Output As #1
   For i = 1 To UBound(Freqs)
      With Freqs(i)
         Print #1, .V1, .V2, "  F = "; UBound(.groups)
         For k = 1 To UBound(.groups)
            Print #1, .groups(k)
         Next k
      End With
   Next i
   Close #1
End Sub


Beitrag wurde zuletzt am 17.02.15 um 06:47:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 17.02.15 07:22

hallo Manfred X,

danke für deine Zeit.


Zitat:


Die Fragestellung ist auch nicht völlig klar.
Können negative Werte auftreten?
Können Werte innerhalb einer Gruppe mehrfach vorkommen?
Können die Ausgangsdaten in der Datei als irgendwie vorsortiert angenommen werden?


Nein - es können keine negative Werte auftreten

Nein - in der input.txt gibt es keine mehrfachen Werte innerhalb einer Gruppe

Die Ausgangsdatei "input.txt" die ich als Link beigefügt habe
ist so aufgebaut wie ich sie verlinkt habe.

Die Gruppenwerte sind absteigend sortiert.
Die größte Gruppe steht am Dateianfang

3096 12
3096 14
3096 39
3096 46
3096 50
3097 1
3097 6
3097 12
3097 39
usw.
usw.
bis Gruppe
1

Noch eine Info:
Die 2er-Kombinationen können aus maximal
5356 Kombinationen bestehen
Werte 1 bis 104
104 x 103 / 2 = 5356

Ich habe deinen Vorschlag eben in ein neues Projekt eingefügt.
Dann auf starten gedrückt und diese Meldung erhalten:
Typen unverträglich
Lines(i).Group = CInt(Trim(f(0)))
in der Sub
Sub ReadLines(file_in As String)

Nochmals danke für deine Zeit

LG
Angelina

Beitrag wurde zuletzt am 17.02.15 um 07:24:34 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 17.02.15 07:26

Tja. Das ist der kritische Punkt.
Wie genau ist die Datei-Zeile aufgebaut?
Wenn ein "Tab" zwischen den beiden Zahlen steht,
müssen die zwei Zeilen hinter dem "Oder" natürlich
aus dem Code entfernt werden.

Dieser Code führt zum Split am Tabulatorzeichen:
f = Split(ln, Chr(9))

Beitrag wurde zuletzt am 17.02.15 um 07:32:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 17.02.15 07:45

hallo Manfred X,

du hast bestimmt nicht die input.txt aus der Dropbox geladen - oder?

Ich habe dort eine Beispiel input.txt beigefügt.

Kannst ja dort nochmals schauen.

Hätte nicht gedacht, das es doch so viel VBCode wird.
Viel Arbeit gewesen

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 17.02.15 07:53

Doch, habe ich!
Dort steht ein "Tab" zwischen den beiden Zahlen.
Also einfach die zweite Split-Variante aus dem Code entfernen ...

Falls Leerzeilen o.ä. zwischen den Daten-Zeilen stehen
oder hinten angehängt sind, müssen die zusätzlich gefiltert werden.

Beitrag wurde zuletzt am 17.02.15 um 07:58:18 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 17.02.15 08:04

hallo nochmals,

ohh.... stimmt - sorry habe ich übersehen


Ich habe diese Zeile dann auskommentiert
'f = Split(ln, " ")

so ist es nun - richtig?
'Oder:
        ln = Replace(ln, "  ", " ")
        'f = Split(ln, " ")
        Lines(i).Group = CInt(Trim(f(0)))
        Lines(i).Value = CInt(Trim(f(1)))
Habe es dann kurz laufen lassen - mit der input.txt aus der Dropbox.
Funktioniert.

Nur so eine Frage:
Das F in der output.txt - was heißt das?
Klar - ist die Häufigkeit - aber was ist das F für dich?

Ich werde dann heute mal testen - und dir noch eine Rückmeldung geben.
Könnte ja sein, das es bei einer größeren Datei zu Problemen kommt.

Nochmals vielen lieben Dank für deine tolle Arbeit.
Danke für deine Zeit und Mühe
Hat mir echt sehr geholfen !!!


DANKE

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 17.02.15 08:12

F, Freq (Statistical Frequency) steht im Code und im Output als Symbol
für eine Angabe zur Häufigkeit


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 19.02.15 07:20

guten morgen Manfred X,

ich bin noch eine Rückmeldung schuldig

Alles läuft fehlerfrei - auch eine größere Datenmenge wird
fehlerfrei verarbeitet. Also eine Top Leistung von dir.

Aufgrund der großen Datenmenge wurde aber die output.txt etwas unübersichtlich.
Besteht die Möglichkeit eine zweite output.txt anzulegen?

Die erste output.txt ist ja so aufgebaut:
 1             2             F =  10
 2000
 1888 
 1789 
 1629
usw.
usw.
Die zweite output.txt stelle ich mir dann so vor:
 2000
 1             9             F =  46
 1             3             F =  23
 1             4             F =  51
usw.
usw.
 
 1999
 1             8             F =  20
 1             2             F =  23
 1             7             F =  30
Also absteigend die Gruppe sortiert.
2000
mit den Werten
1999
mit den Werten
usw.
usw.


Wie gesagt - zwei output.txt
output1.txt wie bisher
output2.txt NEU

Oder ist der Aufwand dafür zu groß?

Nochmals danke für deine Zeit und Mühe

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 19.02.15 11:39

Ich nix verstehen .....

Dieser Output- Eintrag .....

1 2 F = 10
2000
1888
1789
1629

bedeutet:
Die Kombination der beiden Werte 1, 2 ist in den Daten-Zeilen
insgesamt 10x enthalten. Danach werden die 10 Gruppen, die
diese Werte-Paarung (1,2) enthalten, gelistet.

Wenn zunächst eine bestimmte Gruppe ausgegeben wird,
was soll dieser Gruppe als Häufigkeit zugeordnet werden ???
Eine Gruppe enthält jede Werte-Kombination ein mal
(weil Deinen Angaben zufolge, so weit ich erinere,
sich Werte in einer Gruppe nicht wiederholen).


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 19.02.15 11:56

hallo Manfred X,


Manfred X schrieb:
Zitat:



Dieser Output- Eintrag .....

1 2 F = 10
2000
1888
1789
1629

bedeutet:
Die Kombination der beiden Werte 1, 2 ist in den Daten-Zeilen
insgesamt 10x enthalten. Danach werden die 10 Gruppen, die
diese Werte-Paarung (1,2) enthalten, gelistet.



Richtig - ist für die output1.txt auf perfekt so

Zitat:


Wenn zunächst eine bestimmte Gruppe ausgegeben wird,
was soll dieser Gruppe als Häufigkeit zugeordnet werden ???
Eine Gruppe enthält jede Werte-Kombination ein mal
(weil Deinen Angaben zufolge, so weit ich erinere,
sich Werte in einer Gruppe nicht wiederholen).


Beispiel:
Zu der Gruppe
2000
1 2 F = 10
gibt es die Kombination mit den Werten 1, 2
und
und
und

So dachte ich:
2000
1 2 F = 10
1 4 F = 20
1 6 F = 90
8 9 F = 10
usw.

1999
1 7 F = 10
1 6 F = 20
1 8 F = 90
1 9 F = 10

Du nun besser verstehen?

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 19.02.15 12:11

Nein!

Was hat die Häufigkeitsangabe (F) damit zu tun?
Die bezieht sich nicht auf eine bestimmte Gruppe,
sondern ergibt sich aus dem Auftreten der Werte Paarung
in allen Gruppen und kann deshalb nicht einer
bestimmten Gruppe zugeordnet werden.

(Für mich sind das "blinde Zahlenschaufeleien".
Ich kenne den Sinn dieser Operationen nicht.
Erkläre, was die Zahlen bedeuten und welchen Zweck Du verfolgst.)



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 19.02.15 12:45

hallo,

hm.... immer noch nicht verstanden

Ich erstelle eine Statistik " abzählende Kombinatorik "

Nochmals - wenn ich die output.txt öffne
habe ich eine sehr große Datenmenge

Wenn ich nun in der geöffneten output.txt (Notepad)
Suche nach Wert 2000 (ist ja die Gruppe) eingebe
dann springt er zum ersten Eintrag wo die 2000 steht

dann schaue ich nach was praktisch für eine Zuordnung war
z.B.
10 20 F = 1

das notiere ich mir auf einen Zettel

dann suche weiter

nun findet er wieder 2000

z.B.
12 20 F = 8

das notiere ich mir auch

usw.

Dann habe ich als Ergebnis:

2000
10 20 F = 1
12 20 F = 8

das mache ich dann mit 1999 auch so
mit 1998 so
mit 1997 so

usw.

Besser kann ich es leider nicht erklären.


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 19.02.15 13:03

Du möchtest eine Datenbank-Anwendung erstellen.
Dort kannst Du beliebige Abfragen nach Vorgabe-Bedingungen vornehmen - kein Problem !
Text-Dateien besitzen keine Infratruktur für Operationen wie Suchen/Sortieren/Filtern.

Die Datei, die Du im Auge hast, wäre riesig,
weil bei jeder Gruppe alle darin enthaltenen Werte-Paarungen verzeichnet sind.
Sie enthielte wesentlich mehr Datensätze als die Input-Datei.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 19.02.15 13:31

hallo,

am einfachsten wäre doch folgendes:

beim schreiben der output.txt wird in eine zweite output2.txt das geschrieben

2000 10 20 F = 1
2000 12 20 F = 8
2011 11 22 F = 1
2011 11 23 F = 1
1990 11 22 F = 1
1990 11 23 F = 1

und dann nach dem ersten Eintrag absteigend sortieren lassen
2011 11 22 F = 1
2011 11 23 F = 1
2000 10 20 F = 1
2000 12 20 F = 8
1990 11 22 F = 1
1990 11 23 F = 1

dann sollte die output1.txt die gleiche Größe haben wie die
output2.txt

oder?

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Manfred X
Datum: 19.02.15 13:47

Die Zahl der Datensätze wäre identisch,
aber nicht die Bytelänge der Datei,
die wäre 2x-3x größer als Output.txt.

Was spricht gegen eine einfache DB-Anwendung?

Eine Tabelle, die drei Spalten enthält: Gruppe, Wert1, Wert2
Jeder Datensatz stünde für eine Werte-Kombi in einer Gruppe.
(Eventuell kann man Vorteile aus Normalformen gewinnen:
Liste der Gruppen, Liste der Werte, Zuordnungstabelle über SatzIds)

Daraus ließe sich z.B. per SQL abfragen:
- Häufigkeit einer Paarung in allen Gruppen
- Liste der Gruppen, die eine Paarung enthalten
- Liste der Paarungen einer Gruppe

Natürlich könnte man zusätzlich Einschränkungen einbeziehen,
z.B. Bereich der Werteausprägungen oder der Gruppen-Ausprägungen.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 19.02.15 14:38

hallo,

Manfred X schrieb:
Zitat:


Was spricht gegen eine einfache DB-Anwendung?


Ist ja eine tolle Idee von dir - nur ich dachte
es sollte so wenig Aufwand wie möglich sein.

Du hast ja schon genug für mich in VB geschrieben.

Man/Frau will es ja nicht übertreiben


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Einspruch, Text Dateien sind sehr schnell 
Autor: Blackbox
Datum: 19.02.15 18:14

Hallo Manfred,

CSV-Text-Dateien sind sehr sehr wirkungsvoll und es sind Textdateien.
Einfach eine Schema.Ini dazu und den ODBC-Text-Treiber einsetzen, das wars.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

CSV-Dateien sind meist keine echte Alternative 
Autor: Manfred X
Datum: 19.02.15 18:25

Mit CSV-Dateien können strukturierte (relationale)
Daten nicht effektiv verarbeitet werden (keine Normalform).
Zudem bieten nur Datenbanken eine sichere Datenhaltung
(Schutz vor nicht strukturkonformen Änderungen,
Typsicherheit, Abwehr unberechtiger Zugriffe usw. ...)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: Franki
Datum: 20.02.15 09:00

Hallo,
Zitat:


Was spricht gegen eine einfache DB-Anwendung?
Zitat:


Ist ja eine tolle Idee von dir - nur ich dachte
es sollte so wenig Aufwand wie möglich sein.


Wie groß der Aufwand ist hängt von der Aufgabenstellung ab.
In deinem Fall ist eine DB der wesentlich geringere Aufwand dein Problem zu lösen. Es reichen ganz simple SQL Abfragen um das gewünschte Ergebnis anzuzeigen. Und von der Geschwindigkeit ist das auch noch schneller als das über die reine Textdatei zu machen. Also deine Datei per Import rein in die DB und dann weiter arbeiten.

Wenn man nur einen Hammer hat wird jede Schraube zum Nagel, klar bekommt man den auch irgendwie in eine Mutter rein, aber ein Schraubendreher ist (mehr Aufwand/DB) die bessere und effektivere Möglichkeit. Grade wenn es sich um große Datenmengen handelt.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA 
Autor: JBL
Datum: 20.02.15 09:31

hallo Franki,

danke für deine Rückmeldung.

Aber ich bekomme ja den Werkzeugkasten erst garnicht auf

Hatte gestern versucht mit Ecxel die Daten einzulesen und zu sortieren
ist auch nicht das gelbe vom Ei.

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: JBL
Datum: 21.02.15 13:35

hallo Manfred X,

ich hätte mal eine Frage zu deinem VBCode Teil1 + Teil2

dieser ist ja derzeit nur auf 2er-Kombinationen ausgelegt.

Ist es machbar diesen etwas variabler zu ändern?

Ich meine damit das auch 3er,4er,5er,6er,7er bis 10er Kombinationen
ermittelbar wären? Oder gibt es ab einer bestimmen Anzahl von
Such-Kombinationen Beschränkungen in der Verarbeitungszeit?


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: Manfred X
Datum: 21.02.15 14:43

Du stellst Anforderungen und legst dann scheibchenweise weitere Wünsche nach.
Du solltest Dir angewöhnen, zuerst zu klären, was Du möchtest und dann dazu
gezielte Fragen stellen.
Kombinationen erstellt man über einen entsprechenden Algorithmus.
Dazu gibt es in diesem Forum bereits Themen und Vorschläge.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: JBL
Datum: 22.02.15 08:17

guten morgen Manfred X,

sorry wenn ich dich verärgert habe.

Manfred X schrieb:
Zitat:


Kombinationen erstellt man über einen entsprechenden
Algorithmus. Dazu gibt es in diesem Forum bereits Themen und Vorschläge.


Ja - aber für mich stellt sich diese Frage:
Derzeit werden 2-er-Kombinationen mit den Gruppen abgearbeitet
Sind 3-er-, 4-er-,5-er- usw. dann mit deinem VBCode möglich
oder gibt es da Grenzen (Verarbeitungszeit) und wie baut man
einen möglichen weiteren Algorithmus in deinen VBCode ein?


Bitte nicht böse sein

LG
Angelina


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: Manfred X
Datum: 22.02.15 08:30

Ich bin nicht böse.
Hast Du ausgerechnet, welche Datenmengen produziert würden.
Nutze den Binomialkoeffizienten und prüfe, wieviele Kombinationen
es gibt, wenn alle 3er, 4er, ...10er-Kombis zu max. 104 Werten
pro Gruppe ausgegeben werden.

Du solltest Dir klar machen, welche Informationen tatsächlich aus
den Eingabedaten zu ermitteln sind.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 2er-Kombinationen bilden VBA (1.Teil) 
Autor: JBL
Datum: 22.02.15 10:18

hallo nochmals,


Manfred X schrieb:
Zitat:

Ich bin nicht böse.
Hast Du ausgerechnet, welche Datenmengen produziert würden.
Nutze den Binomialkoeffizienten und prüfe, wieviele
Kombinationen
es gibt, wenn alle 3er, 4er, ...10er-Kombis zu max. 104 Werten
pro Gruppe ausgegeben werden.



wenn ich richtig gerechnet habe dann sollte das Ergebnis stimmen:


104 über 2 = 5356 (ist bereits im VBCode)
 
104 über 3 = 182104 (wäre sinnvoll)
 
104 über 4 = 4598126 (wäre sinnvoll)
 
104 über 5 = 91962520 (sinnlos)
 
104 über 6 = 1517381580 (sinnlos)
 
104 über 7 = 21243342120 (sinnlos)
 
104 über 8 = 257575523205 (sinnlos)
 
104 über 9 = 2747472247520 (sinnlos)
 
104 über 10 = 26100986351440 (sinnlos)
Und - ist es richtig?

Könntest du das umsetzen?
104 über 3 und 4

Inklusive der DB-Anwendung?

Oder wäre das jetzt mehr als unverschämt?
Ich frage nur!


Was spricht gegen eine einfache DB-Anwendung?
 
Eine Tabelle, die drei Spalten enthält: Gruppe, Wert1, Wert2
Jeder Datensatz stünde für eine Werte-Kombi in einer Gruppe.
(Eventuell kann man Vorteile aus Normalformen gewinnen:
Liste der Gruppen, Liste der Werte, Zuordnungstabelle über SatzIds)
 
Daraus ließe sich z.B. per SQL abfragen:
- Häufigkeit einer Paarung in allen Gruppen
- Liste der Gruppen, die eine Paarung enthalten
- Liste der Paarungen einer Gruppe
 
Natürlich könnte man zusätzlich Einschränkungen einbeziehen,
z.B. Bereich der Werteausprägungen oder der Gruppen-Ausprägungen
Nochmals danke für deine Zeit und Mühe

LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 06:37

Hallo!

Für eine Datenbank-Anwendung benötigt man ein Datenbank-System.
Das ist in VB6 nicht enthalten, sondern wird ergänzend gebraucht
(Zugriffe per ADO; DAO scheint in neuen Windows-Versionen Probleme zu machen).

Du hälst die Ausgabe von knapp einer halben Million Kombinationen
bei einer Gruppe noch für sinnvoll?
Vermutlich stehen in Deiner Input-Datei hunderte von Gruppen,
was etliche Millionen Datensätze ergäbe.
Nochmal gefragt: Wofür brauchst Du diese Listen?

(Ich fürchte, eine Office-DB wie "Access" wäre mit der Verwaltung
solcher Tabellen überfordert. Ob und ggf. Wie ADO diese Datensatz-Menge
bewältigen kann, muß ein ADO-Spezialist beantworten.)

Hier dateibezogener Beispielcode für Kombinations-Listen:
   Sub Wertekombinationen_ausgeben(filename As String, _
      values() As Integer, kstart%, kend%)
 
      'Filename: Ausgabedatei für Kombinationen
      'values: Array mit den zu kombinierenden Werten
      'kstart: kleinste Kombination (mindestens 1)
      'kend: größte Kombination (maximal ubound(values)+1)
 
      Dim ak%, i%: ak = FreeFile
      If kend > UBound(values) + 1 Then kend = UBound(values) + 1
 
      Open filename For Append As #ak
      For i = kstart To kend
         NueberK_Output values, i, ak
      Next i
      Close #ak
   End Sub
 
 
   Sub NextIndex(ByRef indices() As Integer, n%)
 
        'Ermittlung der nächsten Indizierung bei
        'Kombinationen ohne Zurücklegen
 
        Dim j%, k%, l%, m%
        k = UBound(indices) + 1
 
        If indices(0) = -1 Then
            'Startwerte erstellen
            For j = 0 To k - 1
                indices(j) = j
            Next j
            Exit Sub
        End If
 
        m = -1
        For j = k - 1 To 0 Step -1
            m = m + 1
            If indices(j) < n - 1 - m Then
                indices(j) = indices(j) + 1
                For l = j + 1 To k - 1
                    indices(l) = indices(l - 1) + 1
                Next
                Exit For
            End If
        Next j
 
     End Sub
 
 
    Function NueberK(n%, k%) As Double
 
        'Binomialkoeffizient berechnen
        NueberK = -1
        If k < 1 Then Exit Function
        If n < k Then Exit Function
 
        Dim j%
        Dim zw#: zw = 1
        Dim nw#: nw = 1
        For j% = 0 To k - 1
            zw = zw * (n - j): nw = nw * (j + 1)
        Next j
 
        NueberK = zw / nw
 
    End Function
 
 
    Function NueberK_Output(values() As Integer, k%, _
        kanal_out As Integer) As Boolean
 
        'Liste aller Kombinationen der Werte in Values
 
        'values: null-basiertes Array mit Werteliste n = ubound(values)+1)
        'k: Anzahl der Werte in einer Kombination
        'Ausgabe in den Output_kanal
 
        On Error GoTo fehler
        NueberK_Output = False
 
        Dim indices%()
        ReDim indices%(k - 1)
        indices(0) = -1
 
        Dim anz&
        anz = CLng(NueberK(UBound(values) + 1, k))
        If anz = -1 Then Exit Function
 
        Dim i&, j%
        For i = 1 To anz
            NextIndex indices, UBound(values) + 1
            For j = 0 To k - 1
               Print #kanal_out, values(indices(j));
            Next j
            Print #kanal_out, ""
        Next i
 
        NueberK_Output = True
        Exit Function
 
fehler:
 
    End Function


Beitrag wurde zuletzt am 23.02.15 um 07:07:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 09:53

hallo Manfred X,

danke danke für deine Arbeit.

Habe paar Fragen dazu:

Hier dateibezogener Beispielcode für Kombinations-Listen:

Also für meine input.txt ?

Wo schreibe ich input.txt und output.txt hin?
Wo sage ich ob es 1,2,3 oder 4er Kombis sein sollen?


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 10:09

Das ist allgemein gehaltener Demo-Code, dem man ein Wertearray
übergibt (values) und der alle Kombinationen von kstart bis kend
in die als Parameter gegebene Datei schreibt.

Für Deine Zwecke (Häufigkeit in Gruppen) muß eine Routine angepaßt werden.
Function NueberK_Output(values() As Integer, k%, kanal_out As Integer) As _
  Boolean
 
     'Liste aller Kombinationen der Werte in Values
 
     'values: null-basiertes Array mit Werteliste n = ubound(values)+1)
     'k: Anzahl der Werte in einer Kombination
     'Ausgabe in den Output_kanal
 
     On Error GoTo fehler
     NueberK_Output = False
 
     Dim indices%()
     ReDim indices%(k - 1)
     indices(0) = -1
 
     Dim anz&
     anz = CLng(NueberK(UBound(values) + 1, k))
     If anz = -1 Then Exit Function
 
     ReDim kombi(k - 1) As Integer
 
     Dim i&, j%, l%, freq&
 
     For i = 1 To anz
        NextIndex indices, UBound(values) + 1
 
        'aktuelle Kombination aus Indices ermitteln
        For j = 0 To UBound(kombi)
            kombi(j) = values(indices(j))
        Next j
 
        'Häufigkeit dieser Kombi in den Gruppen zählen
        freq = 0
        'Schleife über Wertelisten in den Gruppen
        'Array: Kombis enthält Gruppen
        For j = 1 To UBound(kombis)
            If ContainsAll(kombis(j).V1, kombi) Then freq = freq + 1
        Next j
 
        If freq > 0 Then
           'Kombination und Häufigkeit ausgeben
           For j = 0 To k - 1
              Print #kanal_out, values(indices(j));
           Next j
 
           Print #kanal_out, "  F = " & CStr(freq)
        End If
     Next i
 
     NueberK_Output = True
     Exit Function
 
fehler:
 
End Function
 
 
Private Function ContainsAll(total() As Integer, kombi() As Integer) As Boolean
 
    'Sind alle Kombi-Werte in Total enthalten ?
 
    ContainsAll = False
 
    Dim i%, k%, found As Boolean
 
    For k = 0 To UBound(kombi)
       found = False
       For i = 1 To UBound(total)
          If total(i) = kombi(k) Then found = True: Exit For
       Next i
       If Not found Then Exit Function
    Next k
 
    ContainsAll = True
End Function
Der Code in der Hauptroutine "Form_Load" sieht dann so aus:
   'Typen-Deklarationen wie bisher 
 
   'Daten-Liste lesen (wie bisher)
   ReadLines "C:\Daten\input.txt"
 
   'Liste der Gruppen erstellen (incl. Wertearray für jede Gruppe)
   'wie bisher 
   SetLinesToKombis
 
   Dim fn$: fn = "C:\daten\output_neu.txt"
 
   'Werteliste erstellen (1-104, nullbasiert)
   Dim values%(103), i%
   For i = 0 To 103
       values(i) = i + 1
   Next i
 
   '2er bis 4er Kombis durchgehen und Häufigkeit ausgeben
   Wertekombinationen_ausgeben fn, values, 2, 4
 
   'bisheriger rest entfällt


Beitrag wurde zuletzt am 23.02.15 um 10:10:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 12:06

Hallo Manfred X,

also irgendwie bastel ich mir hier was falsches zurecht:

Habe es nun so:
https://www.dropbox.com/s/rt4ruykak3x1bpv/Info.txt?dl=0

Wollte es hier einfügen - leider VBCode zu groß

Ich habe lieber einen Command1_Click()

aber dort kommt gleich die Fehlermeldung
Sub oder Function nicht definiert
Wertekombinationen_ausgeben



Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 12:21

Tja .... da fehlt wohl einiges!
Suchen ..... z.B. hier
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 12:46

hallo

habe das nun eingefügt - warum das verschwunden war - keine Ahnung

kommt

Datei nicht gefunden

Open file_in For Input As #1


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 12:51

Du mußt natürlich beim Aufruf von ReadLines
den Pfad/Namen Deiner Input-Datei als Parameter angeben.
Entsprechend auch für die Output-Datei.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 13:13

hallo

ok habe ich nun so:

https://www.dropbox.com/s/607ae4xhj96vuln/Info2.txt?dl=0


Ausgabe dann so:

Häufigkeit bekomme ich keine in der output.txt angezeigt oder neue output

Hier ein Auszug:

1 65
1 66
1 67
1 68
1 69
1 70
usw.


4 66 88
4 66 89
4 66 90
4 66 91
4 66 92
4 66 93
usw.


1 75 83 99
1 75 83 100
1 75 83 101
1 75 83 102
1 75 83 103
1 75 83 104
1 75 84 85

usw.


Angelina

Beitrag wurde zuletzt am 23.02.15 um 13:14:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 14:13

hallo,


Manfred X schrieb:
Zitat:

Buh.
Die für Deine Zwecke angepasste Routine
&quot;Nueberk_Output&quot; steht
hier



Die habe ich doch eingebaut.

Zeige mir doch bitte in einer txt (weil hier nicht so viel VBCode eingefügt werden kann)
wie der ganze neue Aufbau aussehen soll. Bitte!


LG
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: Manfred X
Datum: 23.02.15 14:21

Es gibt zwei Varianten dieser Routine.

Eine allgemeine, die Kombinationen in eine Datei schreibt und
eine für Dich angepaßte, die zusätzlich den Abgleich mit den
Einträgen der Kombis-Liste durchführt, die die Wertelisten der
Gruppen aus Deiner Input-Datei enthält (Häufigkeitsauszählung).

Vielleicht machst Du Dir die Mühe und schaust Dir beide Varianten an.
Dann sollte die korrekte Zusammenstellung klar werden.







Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Liste der Kombinationen zu einem Wertearray 
Autor: JBL
Datum: 23.02.15 16:32

hallo Manfred X,

so besser?

https://www.dropbox.com/s/8iqduxane8rzvol/Info3.txt?dl=0


Stellt sich noch die Frage, ob es nach der langen Rechenzeit eine
absteigende Sortierung gibt - oder habe ich die übersehen?

Variante1 war ja so:

Private Sub SortKombiGroupsList()
 
   'nach Häufigkeiten (= Anzahl Gruppen) fallend sortieren
   Dim i%, k%, f As Freq
   For i = 1 To UBound(Freqs) - 1
      For k = i + 1 To UBound(Freqs)
         If UBound(Freqs(i).groups) < UBound(Freqs(k).groups) Then
            f = Freqs(i)
            Freqs(i) = Freqs(k)
            Freqs(k) = f
         End If
      Next k
   Next i
End Sub
Angelina
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Meinen Beitrag vielleicht überlesen 
Autor: Blackbox
Datum: 23.02.15 21:26

Hi,

meinen Einwand übersehen?
So wie Manfred X das vorschlägt, so löst man dieses Problem nicht.
Gerade für große Dateien lohnt es sich das CSV-Schema mal anzusehen.
Schließlich löst das alles ein ODBC-Texttreiber auf elegante Art und Weise
einer SQL-Datenbank ... und wie Franki es zutreffend sagt ... ein
Kinderspiel wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meinen Beitrag vielleicht überlesen 
Autor: JBL
Datum: 23.02.15 21:58

hallo Blackbox,
danke für deine Rückmeldung

hm.... ich habe es nun so gemacht


https://www.dropbox.com/s/8iqduxane8rzvol/Info3.txt?dl=0

ob ich es 100%ig nach Vorgabe von Manfred X gemacht habe - bin ich mir
nicht so sicher.

Habe heute um 17:10 Uhr begonnen (mit dem VBCode aus o.g. Info3.txt)
und um 20:15 Uhr war das Programm fertig.
Ergebnis:
output_neu.txt mit rund 54 mb wurde angelegt
rund 2,3 Mio Zeilen

Aber - ich kann eigentlich nichts damit anfangen.
Weil keine absteigende Sortierung vorhanden ist
und weil ich keine Gruppen zu den Kombinationen habe.

Tja ... vielleicht habe ich wieder einen Fehler gemacht.

Zu deinem Vorschlag kann ich leider nichts sagen
ich habe absolut - keine bis ganz wenig Erfahrung in VB

Was soll ich machen ... keine Ahnung

LG
Angelina

Beitrag wurde zuletzt am 23.02.15 um 22:03:53 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Meinen Beitrag vielleicht überlesen 
Autor: Franki
Datum: 24.02.15 07:14

Hallo,
Zitat:


Ergebnis:
output_neu.txt mit rund 54 mb wurde angelegt
rund 2,3 Mio Zeilen

Das ist eine Menge, die du nicht wirklich brauchst, kein Mensch liest sich diese Ergebnisanzahl durch geschweige denn wertet sie aus.
Zitat:


Aber - ich kann eigentlich nichts damit anfangen.
Weil keine absteigende Sortierung vorhanden ist
und weil ich keine Gruppen zu den Kombinationen habe.


Und da kommt wieder der Hinweis auf SQL, dort gibt es so schöne Sachen wie Group by (nach verschiedenen Kriterien), Order By (aufsteigend oder absteigend) und einige mehr. Als Ergebnis hättest du dann nur die Daten die du wirklich benötigst.

Zitat:


ich habe absolut - keine bis ganz wenig Erfahrung in VB
Was soll ich machen ... keine Ahnung


Da liegt meiner Meinung nach dein Hauptproblem. Was du brauchst sind Grundlagen. Was du möchtest ist im übertragenen Sinn in der ersten Fahrstunde lernen wie man an bergauf rückwärts einparkt und das noch bei Dunkelheit und Schnee auf der Fahrbahn. Das wird nichts, auch beim dritten Versuch nicht in der ersten Fahrstunde.

Die Frage ist, ob du nur eine Lösung für dein Problem bzw. deine Aufgabenstellung brauchst (und gut ist es), oder ob du dich in die Lage versetzten möchtest so etwas selbst programmieren zu können (auf welchem Weg auch immer) Hinweise wie das Forum hier funktioniert hast du von ManfredX ja schon bekommen. (Auch auf das Jobs Forum)

Gruß
Frank



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Kombinationen als CSV-Sätze 
Autor: Manfred X
Datum: 24.02.15 07:47

Hallo!

Zu Copy'n Paste:
Wenn Du Code aus einem Forum ausführst, bist Du selbst für etwaige negative Folgen verantwortlich.
Die Software zur Verwaltung von Internet-Foren ist oft nicht besonders sicher.
Es könnten sich eventuell z.B. Dritte einhacken und Änderungen an Code-Beiträgen vornehmen,
die bei Ausführung zu Datenverlusten o.ä. führen.
Es ist sehr wichtig, den heruntergeladenen Code sorgfältig zu überprüfen.

Zur Ausgabe-Datei:
Ich hatte zwei mal gefragt, zu welchem Zweck Du diese Daten benötigst und wie sie weiter verwendet
werden sollen. Das hast Du ignoriert. Dann sind auch keine gezielten Hinweise möglich.
Ich hatte davor gewarnt, daß Millionen von Datensätzen entstehen würden.
Um die Datenmenge zu begrenzen, habe ich die Gruppen weg gelassen. (Und weil mir Deine Anforderung
nicht eingeleuchtet hat.)
Übrigens: Die Ausgabe-Datei wird in meinem Beispiel mit "Append" geöffnet - eventuell benötigst
Du die Option "OutPut".

Zur Sortierung:
Bei der Ausgabe von unterschiedlichen Kombinationen (2-4) ist das Sortieren nach Häufigkeit nicht
mehr eindeutig durchführbar: innerhalb der 2er, 3er, 4er Kombis oder über alle Sätze ??
Man verwendet den Quicksort-Algorithmus, um solche Datenmengen zu bewältigen.

Hier eine weitere modifizierte Fassung der Routine NueberK_Output.
Sie erstellt die von Dir definierten Datensätze (unsortiert) als CSV-Datei: Gruppe;Kombination;Häufigkeit
Diese Datei wird - grob geschätzt- bezogen auf Deinen Input zwischen 10 und 100 Millionen Datensätzen umfassen.
Blackbox kann Dir zeigen, wie man so eine CSV effizient sortiert und abfragt per OLEDB-Treiber.

    Function NueberK_Output(values() As Integer, k%, kanal_out As Integer) As _
      Boolean
 
        'Liste aller Kombinationen der Werte in Values
 
        'values: null-basiertes Array mit Werteliste n = ubound(values)+1)
        'k: Anzahl der Werte in einer Kombination
        'Ausgabe in den geöffneten Ausgabekanal: kanal_out
 
        On Error GoTo fehler
        NueberK_Output = False
 
        Dim indices%()
        ReDim indices%(k - 1)
        indices(0) = -1
 
        Dim anz&, kombistr$, groups() As Integer
        anz = CLng(NueberK(UBound(values) + 1, k))
        If anz = -1 Then Exit Function
 
        ReDim kombi(k - 1) As Integer
        Dim i&, j%, l%, freq&
        For i = 1 To anz
            NextIndex indices, UBound(values) + 1
 
            'aktuelle Kombination aus Indices ermitteln
            'und AusgabeString erstellen
            kombistr = ""
            For j = 0 To k - 1
               kombi(j) = values(indices(j))
               kombistr = kombistr & CStr(kombi(j))
               If j < k - 1 Then kombistr = kombistr & "-"
            Next j
 
            ReDim groups(10)
            'Häufigkeit dieser Kombi in den Gruppen zählen
            freq = 0
            'Schleife über Werteliste in Gruppen
            For j = 1 To UBound(kombis)
                If ContainsAll(kombis(j).V1, kombi) Then
                   freq = freq + 1
                   If freq > UBound(groups) Then
                      ReDim Preserve groups(UBound(groups) + 10)
                   End If
                   'Gruppe, in der die Kombi auftritt, notieren
                   groups(freq) = kombis(j).Group
                End If
            Next j
 
            If freq > 0 Then
               'jeweils Gruppe, Kombination und Häufigkeit ausgeben
               'aufgebaut als Zeile einer CSV-Datei (Strichpunkte trennen 3 
               ' Felder)
               For j = 1 To freq
                   Print #kanal_out, CStr(groups(j)) & ";" & kombistr & ";" & _
                     CStr(freq)
               Next j
            End If
        Next i
 
        NueberK_Output = True
        Exit Function
 
fehler:
 
    End Function


Beitrag wurde zuletzt am 24.02.15 um 07:50:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombinationen als CSV-Sätze 
Autor: JBL
Datum: 24.02.15 07:57

hallo Manfred X,

danke für die Info und die Erweiterung.

1.
Stimmt denn nun dieser Aufbau
https://www.dropbox.com/s/8iqduxane8rzvol/Info3.txt?dl=0
oder hatte ich wieder etwas vergessen?

2.
Ich modifiziere die Fassung der Routine NueberK_Output ?

3.
Ich mache noch das:
"Die Ausgabe-Datei wird in meinem Beispiel mit "Append" geöffnet - eventuell benötigst
Du die Option "OutPut". "

4.
Dann lasse ich nochmals alles laufen und erhalte eine CSV Datei

ok?

LG
Angelina

Beitrag wurde zuletzt am 24.02.15 um 07:58:37 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kombinationen als CSV-Sätze 
Autor: Manfred X
Datum: 24.02.15 08:14

Nur diese Routine muß in Deinem Code gegen die gleichnamige ausgewechselt werden.

Bezogen auf Deine Beispieldatei "Input.txt" sähe das Ergebnis so aus:

3097;1-6;1
3097;1-12;1
3097;1-39;1
3097;6-12;1
3097;6-39;1
3096;12-14;1
3096;12-39;2
3097;12-39;2
3096;12-46;1
3096;12-50;1
3096;14-39;1
3096;14-46;1
3096;14-50;1
3096;39-46;1
3096;39-50;1
3096;46-50;1
3097;1-6-12;1
3097;1-6-39;1
3097;1-12-39;1
3097;6-12-39;1
3096;12-14-39;1
3096;12-14-46;1
3096;12-14-50;1
3096;12-39-46;1
3096;12-39-50;1
3096;12-46-50;1
3096;14-39-46;1
3096;14-39-50;1
3096;14-46-50;1
3096;39-46-50;1
3097;1-6-12-39;1
3096;12-14-39-46;1
3096;12-14-39-50;1
3096;12-14-46-50;1
3096;12-39-46-50;1
3096;14-39-46-50;1

"MS-Excel" identifiziert das zweite Feld (=Kombination) offenbar als Datumsangabe,
falls dies numerisch möglich ist.
Eventuell kann man die Formatierung ändern (=Aufbau von Kombistr), so daß dies nicht geschieht.
Die endgültige Ausgabedatei wirst Du wegen der Größe aber nicht in Excel laden können.

Beitrag wurde zuletzt am 24.02.15 um 08:18:22 editiert.
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