Hallo Leute,
ich muss folgenden Sache in Visual Basic schreiben.
Ich habe insgesamt ca. 700 Namen, dabei sind es ca. 10 verschiednene
Namen, die einfach unsoritier verteilt sind.
Jetzt muss ich folgendes machen. Ich muss diese Namen in eine kleinere
Tabelle zusammenfassen. So das in der Tabelle folgendes steht: Name1
kommt z.B. 100 mal vor, Name2 kommt 3 mal vor.
Habt Ihr vielelciht Idee wie man sowas realiseren kann. Sitze schon die
ganze Zeit und überlege mir wie man es machen kann!
Die Namen werden aus einer Datenbank ausgelesen und werden nicht
zwischengespeichert.
Du musst doch nur die Namen ablegen und dann Zeile für Zeile einfach nur
gucken wie der name ist. Am besten machst du dir ein leeres Array (z.B.
Namen(20), für die unterschiedlichen Namen) und fängst an zu scannen.
Den Namen aus der ersten Zeile speicherst du in diesem Array. Dann
suchst du in einer for-Schleife jede Zeile der Liste nach den Namen dem
Array Namen() ab. Sollte der Name gefunden werden inkrementierst du den
Namenszähler ansonsten packst du den Namen in das Array Namen() mit rein
damit du einen weiteren namen hast.
In C würde ich das in etwa so lösen:
Eine einfache Methode ist das Array mit den Namen erst zu sortieren und
dann durchzuzählen. Das benötigt je nach Umsetzung sehr wenig
Speicherplatz und kann schön modularisiert werden.
Wenn die Option besteht würde ich die Liste direkt beim Auslesen aus der
Datenbank sortiert anfordern (ORDER BY name). Dann könnte man aber auch
direkt das Durchzählen dabei erledigen (GROUP BY name) ;)
Wie Kai schon schreibt.
1. Sortieren
2. in einer Schleife gucken ob der nächste Name Identisch ist. Wenn ja
Zähler plus eins, andernfalls ab der Position wieder von vorne.
So wird die Liste nur einmal durchlaufen, schneller und simpler gehts
eigentlich nicht.
Könnte diese "Datenbank" evtl. eine Excel-Liste sein? Dann gibt es die
Funktion "Zählewenn". Für 10 verschiedene Namen ist das die einfachste
und schnellste Möglichkeit.
Falls es keine Excel-Tabelle ist, könnte man die Datenbank evtl. nach
CVS (oder CSV?) konvertieren, in Excel importieren und die 3 Formeln in
eine Zelle tippen.
Naja, am einfachsten wäre es, das Zählen direkt per "SELECT COUNT..." in
der DB-Abfrage zu erledigen. Aber VB ist natürlich etwas kniffliger.
Kennt Visual Basic Hash-Tabellen? Damit wäre es einfach. Alternativ
kannst du die Tabelle selbst implementieren, ist aber etwas
komplizierter. Dazu kenne ich Visual Basic auch zu wenig.
Ach ja, Hash-Tabellen werden in einigen Programmiersprachen nicht
explizit so bezeichnet. Man kann dann einfach Arrays mit beliebigen
Werten indizieren. Z.B. in Javascript (ungetestet):
function count() {
var counts = [];
var i;
var name;
for (i in names) counts[names[i]]++;
}
virtuPIC
/ggadgets for tools & toys
In vielen Programmiersprachen gibt es so gegannte assoziative Arrays.
Das sind Arrays, die nicht über nur über eine fortlaufenden Ganzzahl,
sondern über einen (fast) beliebigen Datentyp adressiert werden
können.
In C++ heißen sie Maps, in Python Dictionaries und in Lisp Association
Lists. VB kenne ich nicht, aber ich kann mir gute vorstellen, dass es
dort ebenfalls so etwas gibt.
Wenn ja, legst du ein assoziatives Array mit den Anzahlen der
einzelnen Namen an, das über die Namen adressiert wird. In Python
würde das etwas so aussehen:
1
count = {} # Leeres Dictionary anlegen
2
while True:
3
name = raw_input() # Eingabe eines Namens
4
if name == "": # Eine Leerzeile beendet die Eingabe
5
break
6
try:
7
count[name] += 1 # Zähler für den Namen eins erhöhen
8
except KeyError: # Wenn der Name zum ersten Mal auftritt
9
count[name] = 1 # Zähler auf eins setzen
10
11
for name, cnt in count.items(): # Inhalt des Dictionarys als Liste
12
print name, cnt # von Namen und Anzahlen ausgeben
Falls es diese assoziativen Arrays nicht gibt, kannst du eine Liste
(oder ein erweiterbares normales Array) anlegen, deren Elemente Paare
aus Name und Anzahl sind. Eine Scuhfunktion nach dem Namen führt zum
richtigen Element, dessen Anzahlwert anschließend erhöht wird. Wird
ein Name nicht gefunden, wird eine neues Element an das Ende der Liste
angehängt.
Hallihallo,
ich suche verzweifelt nach einem quelltext der es ermöglicht, obstarten
mit verschiedenen farben und preisen in einer neuen tabell
zusammenzufassen:
so sollt dort dann stehen: X Äpfel, Farbe rot, und der preis aller x
äpfel soll addiert werden...
vllt kann mit ja jemand helfen, bin echt verzweifelt:)
vielen dank schonmal...alex
Hallo Alex.
Ein Forum wie dieses ist ein sehr mächtiges Werkzeug, allerdings muss
man es richtig benutzen. Eine Frage a la "macht ma meine hausaugfaben
ihr deppen aber ich sage euch nich wie!!!!!!1eins" wird selten wie
gewünscht beanwortet. Mit etwas Eigeninitiative, sinnvollem Fragen,
Lesen (+ evtl. Dummschwätzeranteil ausfiltern), Verstehen, Ausprobieren,
Nachfragen, Lesen, Verstehen, ... sind Fragende hier erfahrungsgemäß
sehr erfolgreich. Etwas Respekt dem potentiell hilfsbereiten Leser
gegenüber in Form eines erträglich gestalteten Textes schadet dabei
sicherlich auch nicht.
1.) Was geht in dein Programm rein und wie ist die Eingabe
formatiert(Textdatei, Exceltabelle, manuelle Eingabe)?
2.) Was soll in welcher Form herauskommen?
3.) Kleines Beispiel für 1.) und 2.)
4.) Welche Progammiersprace willst/musst du benutzen? Oder egal,
Hauptsache kostenlos und in Windows? Bunte Knöpfe oder Konsole?
5.) Vorkenntnisse?
6.) Was hast Du zur Problemlösung unternommen? Was hast Du Dir dabei
gedacht? Ideen, wie es funktionieren könnte? Wo kommst Du nicht weiter?
Quelltext?
Grüße
Ach, um Gottes Willen, Obstarten sind gemeint. Durch die konsequente
Kleinschreibung habe ich das tatsächlich überlesen.
Trotzdem, die Asche geht auf das Haupt des rechtschreibbefreiten
Trottels, vor allem auch aus den von "Matt" aufgeführten Gründen.