alle möglichen Datensätze automatisch erzeugen
Moderator: Moderatoren
alle möglichen Datensätze automatisch erzeugen
Hallo,
wie generiere ich automatisch eine Tabelle, in der aus vorgegeben Werten (z.B.
Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS)
alle möglichen Kombinationen dargestellt werden sollen:
Marke|Farbe|Leistung
-------------------------
Audi|rot|200PS
Audi|blau|100PS
Audi|rot|150PS
Opel|blau|200PS
usw.
Es geht darum, alle möglichen Produktkombinationen darzustellen.
Danke
wie generiere ich automatisch eine Tabelle, in der aus vorgegeben Werten (z.B.
Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS)
alle möglichen Kombinationen dargestellt werden sollen:
Marke|Farbe|Leistung
-------------------------
Audi|rot|200PS
Audi|blau|100PS
Audi|rot|150PS
Opel|blau|200PS
usw.
Es geht darum, alle möglichen Produktkombinationen darzustellen.
Danke
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
hallo Ontario,
möchtest Du ernsthaft eine solche "Datenbank" erstellen, dann
verwende dazu auch eine "Ooo_Datenbank".
Die Variationen der einzelnen "ZubehörGruppen" (Farbe;Motor;Sitzbezüge)
und der Kfz-Varianten (Pkw=2türig;3türig;4türig;5türig;Kombi; Cabriolet)
Variante=Standard;Export;Luxus;OberLuxus) plus das Zubhör sind so
vielfältig, das eine "Tabellenkalkulation" dafür nicht geeignet ist.
mfg
Gert
möchtest Du ernsthaft eine solche "Datenbank" erstellen, dann
verwende dazu auch eine "Ooo_Datenbank".
Die Variationen der einzelnen "ZubehörGruppen" (Farbe;Motor;Sitzbezüge)
und der Kfz-Varianten (Pkw=2türig;3türig;4türig;5türig;Kombi; Cabriolet)
Variante=Standard;Export;Luxus;OberLuxus) plus das Zubhör sind so
vielfältig, das eine "Tabellenkalkulation" dafür nicht geeignet ist.
mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Win7_64 / LO_4.4.5.2
Hallo,
ja, ich möchte eine derartige Tabelle erstellen. Das mit den Autos war nur ein Beispiel, um das Problem zu verdeutlichen.
Es geht letzendlich um eine Conjoint-Analyse, was hier aber keine Rolle spielt. Der Nutzen aller Möglichkeiten wird durch diese Analyse bestimmbar: So dass dann herauskommt, dass ein Audi,rot,200PS einen höheren Nutzen als ein Audi,rot,100PS hat. Aber das ist hier völlig egal. Ich brauche eine Möglichkeit, erstmal eine Tabelle mit allen Möglichkeiten zu erzeugen.
Angenommen es stehen die möglichen
Marken in Spalte 1: Audi|Opel|BMW
Farben in Spalte 2: rot|blau
Leistung in Spalte 3: 100PS|150PS|200PS
Wie kann ich nun eine o.g. Tabelle erzeugen?
Nur aus diesen Werten (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) soll eine derartige Tabelle erstellt werden.
ja, ich möchte eine derartige Tabelle erstellen. Das mit den Autos war nur ein Beispiel, um das Problem zu verdeutlichen.
Es geht letzendlich um eine Conjoint-Analyse, was hier aber keine Rolle spielt. Der Nutzen aller Möglichkeiten wird durch diese Analyse bestimmbar: So dass dann herauskommt, dass ein Audi,rot,200PS einen höheren Nutzen als ein Audi,rot,100PS hat. Aber das ist hier völlig egal. Ich brauche eine Möglichkeit, erstmal eine Tabelle mit allen Möglichkeiten zu erzeugen.
Angenommen es stehen die möglichen
Marken in Spalte 1: Audi|Opel|BMW
Farben in Spalte 2: rot|blau
Leistung in Spalte 3: 100PS|150PS|200PS
Wie kann ich nun eine o.g. Tabelle erzeugen?
Nur aus diesen Werten (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) soll eine derartige Tabelle erstellt werden.
Hallo
Lass mal folgendes Makro in einem neuen Calc-dokument laufen:
Gruß Karo
Lass mal folgendes Makro in einem neuen Calc-dokument laufen:
Code: Alles auswählen
Sub kombinationen
'Schreibt alle Kombinationsmöglichkeiten der folgenden Arrayeinträge
'in eine Tabelle
M = array("Audi","BMW","Opel")
F = array("rot","blau")
L = array("100 PS","150 PS","200 PS")
'k = Anzahl der Kombinationen
k = (ubound(M())+1)*(ubound(F())+1)*(ubound(L())+1)
for n = 0 to k-1
' 1.Tabelle.A1:Ck
thisComponent.sheets(0).getcellbyposition(0,n).setstring(M(a))
thisComponent.sheets(0).getcellbyposition(1,n).setstring(F(b))
thisComponent.sheets(0).getcellbyposition(2,n).setstring(L(c))
c = c + 1
if c > ubound(L()) then : b = b+1 : c = 0 : end if
if b > ubound(F()) then : a = a + 1 : b = 0 : end if
next n
End Sub
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
Vielen Dank!
Das ist sensationell und funktioniert super.
Gibt es die Möglichkeit, die Werte (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) aus einer Tabelle auslesen zu lassen?
Es geht mir darum, dass ich die Art und Anzahl der Werte ändern kann (z.B. für Drucker:
10Seiten/min|20Seiten/min - 2JahreGarantie|1JahrGarantie|3JahreGarantie|4JahreGarantie - Farbe|schwarzweiß - groß|klein|mittel)
dann läuft das Makro drüber und generiert die Tabelle.
Das ist sensationell und funktioniert super.
Gibt es die Möglichkeit, die Werte (Audi, BMW, Opel - rot, blau - 100PS, 200PS, 150PS) aus einer Tabelle auslesen zu lassen?
Es geht mir darum, dass ich die Art und Anzahl der Werte ändern kann (z.B. für Drucker:
10Seiten/min|20Seiten/min - 2JahreGarantie|1JahrGarantie|3JahreGarantie|4JahreGarantie - Farbe|schwarzweiß - groß|klein|mittel)
dann läuft das Makro drüber und generiert die Tabelle.
Hallo
Für eine Quelltabelle (hier die erste Tabelle) die so aufgebaut ist:
von A1 bis C3:
Audi|rot|100 PS
BMW|blau|150 PS
Opel| |200 PS
...gibt folgendes Makro die Kombinationen in die zweite Tabelle aus:
Gruß Karo
Für eine Quelltabelle (hier die erste Tabelle) die so aufgebaut ist:
von A1 bis C3:
Audi|rot|100 PS
BMW|blau|150 PS
Opel| |200 PS
...gibt folgendes Makro die Kombinationen in die zweite Tabelle aus:
Code: Alles auswählen
Sub kombinationen2
Do
quellea = thisComponent.sheets(0).getcellbyposition(0,a).string
quelleb = thisComponent.sheets(0).getcellbyposition(1,b).string
quellec = thisComponent.sheets(0).getcellbyposition(2,c).string
thisComponent.sheets(1).getcellbyposition(0,n).string = quellea
thisComponent.sheets(1).getcellbyposition(1,n).string = quelleb
thisComponent.sheets(1).getcellbyposition(2,n).string = quellec
n = n +1
c = c + 1
if thisComponent.sheets(0).getcellbyposition(2,c).string = "" then
b = b + 1 : c = 0 : end if
if thisComponent.sheets(0).getcellbyposition(1,b).string = "" then
a = a + 1 : b = 0 : end if
loop until thisComponent.sheets(0).getcellbyposition(0,a).string = ""
End Sub
Fortsetzung
Hallo zusammen
ich möcht mich mal an dieses Makro dranhängen und habe es aufgemotzt, so dass ich sogar die Komabinationen von 8 Merkmalen erzeugen könnte, geht aber nicht, weil die Möglichkeiten von ca 17 Mio die maximal mögliche Anzahl der Zeilen von Calc sprengen.
Allerdings habe ich ein etwas anderes Problem:
Ich möchte die Kombinationen von 8 vorgegebenen Buchstaben haben, die durch unterschiedliche Anordnung jeweils neue Wörter ergeben.
Jeder Buchstabe darf also nur einmal auftauchen.
Dadurch kommen ca 40 000 Kombinationen zustande. Calc schafft das.
Wird das ein völlig neues Makro oder kann man das oben stehende etwas abändern?
Bin schon auf eine Antwort gespannt.
Wolfgang
ich möcht mich mal an dieses Makro dranhängen und habe es aufgemotzt, so dass ich sogar die Komabinationen von 8 Merkmalen erzeugen könnte, geht aber nicht, weil die Möglichkeiten von ca 17 Mio die maximal mögliche Anzahl der Zeilen von Calc sprengen.
Allerdings habe ich ein etwas anderes Problem:
Ich möchte die Kombinationen von 8 vorgegebenen Buchstaben haben, die durch unterschiedliche Anordnung jeweils neue Wörter ergeben.
Jeder Buchstabe darf also nur einmal auftauchen.
Dadurch kommen ca 40 000 Kombinationen zustande. Calc schafft das.
Wird das ein völlig neues Makro oder kann man das oben stehende etwas abändern?
Bin schon auf eine Antwort gespannt.
Wolfgang
Hallo
abc , acb , bac , bca , cba , cab
Das bereitet mir etwas Kopfzerbrechen, da muss ich (mindestens)eine Nacht drüber schlafen.
Gruß Karo
schreib die Kombi in je eine Zelle, führe einen Platzhalter für den Spaltenindex ein, und erhöhe diesen um 1 bei n = 65000 und setze n wieder auf 0 - dann passts rein -notfalls kann du auch bis zu 256 Tabellenblätter vollschreiben-geht aber nicht, weil die Möglichkeiten von ca 17 Mio die maximal mögliche Anzahl der Zeilen von Calc sprengen.

Du meinst im Prinzip: (mit 3 Buchstaben)Jeder Buchstabe darf also nur einmal auftauchen.
abc , acb , bac , bca , cba , cab
Das bereitet mir etwas Kopfzerbrechen, da muss ich (mindestens)eine Nacht drüber schlafen.
Gruß Karo
Hallo Karolus
der erste Teil meiner Frage mit den 17 Mio war auch nur Gedankenspiel, aber Danke für deine Antwort, werde sie vielleicht irgendwann mal brauchen.
Zum 2.Teil: Ja, genauso soll es aussehen. Die Anzahl der Möglichkeiten sind dann n! (n Fakultät), bei 8 Buchstaben 40320 Kombinationen.
Ich zwing dich zu nichts, nur wenn es Spass macht.
Wolfgang
der erste Teil meiner Frage mit den 17 Mio war auch nur Gedankenspiel, aber Danke für deine Antwort, werde sie vielleicht irgendwann mal brauchen.
Zum 2.Teil: Ja, genauso soll es aussehen. Die Anzahl der Möglichkeiten sind dann n! (n Fakultät), bei 8 Buchstaben 40320 Kombinationen.
Ich zwing dich zu nichts, nur wenn es Spass macht.
Wolfgang
Hallo,
ich müsste ja eigentlich erst Karolus fragen ob ich sein Makro verändern und veröffentlichen darf, er dürfte aber nichts dagegen haben.
Ich habe es auf 6*6 gebracht, damit es auf ein Tabellenblatt passt, sind 46656 Zeilen.
Karolus' Tipp, alles auf mehrere Tabellenblätter zu verteilen, habe ich noch nicht ausprobiert und umgesetzt.
Viel Erfolg damit
Wolfgang
ich müsste ja eigentlich erst Karolus fragen ob ich sein Makro verändern und veröffentlichen darf, er dürfte aber nichts dagegen haben.
Ich habe es auf 6*6 gebracht, damit es auf ein Tabellenblatt passt, sind 46656 Zeilen.
Karolus' Tipp, alles auf mehrere Tabellenblätter zu verteilen, habe ich noch nicht ausprobiert und umgesetzt.
Code: Alles auswählen
Sub kombinationen2_6x6
Do
quellea = thisComponent.sheets(0).getcellbyposition(0,a).string
quelleb = thisComponent.sheets(0).getcellbyposition(1,b).string
quellec = thisComponent.sheets(0).getcellbyposition(2,c).string
quelled = thisComponent.sheets(0).getcellbyposition(3,d).string
quellee = thisComponent.sheets(0).getcellbyposition(4,e).string
quellef = thisComponent.sheets(0).getcellbyposition(5,f).string
thisComponent.sheets(1).getcellbyposition(0,n).string = quellea
thisComponent.sheets(1).getcellbyposition(1,n).string = quelleb
thisComponent.sheets(1).getcellbyposition(2,n).string = quellec
thisComponent.sheets(1).getcellbyposition(3,n).string = quelled
thisComponent.sheets(1).getcellbyposition(4,n).string = quellee
thisComponent.sheets(1).getcellbyposition(5,n).string = quellef
n = n + 1
f = f + 1
if thisComponent.sheets(0).getcellbyposition(5,f).string = "" then
e = e + 1 : f = 0 : end if
if thisComponent.sheets(0).getcellbyposition(4,e).string = "" then
d = d + 1 : e = 0 : end if
if thisComponent.sheets(0).getcellbyposition(3,d).string = "" then
c = c + 1 : d = 0 : end if
if thisComponent.sheets(0).getcellbyposition(2,c).string = "" then
b = b + 1 : c = 0 : end if
if thisComponent.sheets(0).getcellbyposition(1,b).string = "" then
a = a + 1 : b = 0 : end if
loop until thisComponent.sheets(0).getcellbyposition(0,a).string = ""
End Sub
Wolfgang
-
- *******
- Beiträge: 1763
- Registriert: Di, 03.10.2006 18:05
Hallo Karo, wie kann man das jetzt Filtern???
das wird die nächste Frage sein, nachdem die Tabelle mit über 46Tausend
Zeilen inklusive Werte gefüllt ist.
Hallo matlat & ontario
jetzt strengt Eueren Grips mal selber an und sucht bei "Wiki"
nach einem Lösungsweg.
Es ist sogar möglich, Literatur über "Star-Basic" käuflich zu erwerben,
wo doch das Programm "OOo" für "Null" EURO erworben werden kann.
Der Ansatz von Karo bietet ja jede Menge Möglichkeiten für
"learning by doing" .
Ich bleibe dabei, falls Ihr jemals solch eine Lösung dringend benötigt,
werdet Ihr nicht darum herumkommen ein "DB-Programm" zu kaufen
oder zu lernen, wie eine gewünschte Datenbank erstellt wird.
mfg
Gert
Zeilen inklusive Werte gefüllt ist.
Hallo matlat & ontario
jetzt strengt Eueren Grips mal selber an und sucht bei "Wiki"
nach einem Lösungsweg.
Es ist sogar möglich, Literatur über "Star-Basic" käuflich zu erwerben,
wo doch das Programm "OOo" für "Null" EURO erworben werden kann.
Der Ansatz von Karo bietet ja jede Menge Möglichkeiten für
"learning by doing" .
Ich bleibe dabei, falls Ihr jemals solch eine Lösung dringend benötigt,
werdet Ihr nicht darum herumkommen ein "DB-Programm" zu kaufen
oder zu lernen, wie eine gewünschte Datenbank erstellt wird.
mfg
Gert
Es gibt nichts gutes, außer man tut es.
Win7_64 / LO_4.4.5.2
Win7_64 / LO_4.4.5.2
Hallo Wolfgang
Ich halte nur den Titel deines Makros für irreführend, es liest zwar genau 6 Spalten aus, aber die Anzahl der Einträge in den einzelnen Spalten ist variabel.
Zu deiner Anschlussfrage : (Kombinationen innerhalb eines Arrays ohne Wiederholung) muss ich leider passen, es scheint keinen einfachen Algoritmus zum Vertauschen der "Buchstaben" zu geben.
Gruß Karo
Natürlich darfst du das, was meinst du wie ich ans Know How gekommen bin.ich müsste ja eigentlich erst Karolus fragen ob ich sein Makro verändern und veröffentlichen darf
Ich halte nur den Titel deines Makros für irreführend, es liest zwar genau 6 Spalten aus, aber die Anzahl der Einträge in den einzelnen Spalten ist variabel.
Zu deiner Anschlussfrage : (Kombinationen innerhalb eines Arrays ohne Wiederholung) muss ich leider passen, es scheint keinen einfachen Algoritmus zum Vertauschen der "Buchstaben" zu geben.
Gruß Karo