| |
Visual-Basic Einsteiger2er-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
| |
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. | |
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. | |
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. | |
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. | |
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 | |
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. | |
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
| |
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
| |
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 | |
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).
| |
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
| |
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.)
| |
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 | |
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.
| |
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 | |
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.
| |
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
| |
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. | |
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. ...)
| |
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
| |
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 | |
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
| |
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.
| |
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
| |
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.
| |
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 | |
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. | |
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
| |
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. | |
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 | |
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
| |
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 | |
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.
| |
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. | |
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.
| |
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
"Nueberk_Output" 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
| |
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.
| |
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 | |
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. | |
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. | |
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
| |
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. | |
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. | |
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. | |
| 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 |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|