Hallo,
ich bin auf der Suche nach der richtigen Collection.
Folgendes möchte ich gerne umsetzten: http://www1.zaubercenter.de/Grafik1.jpg
Die Daten kommen aus einer Datei, die zeilenweise eingelesen wird. Dabei ist es wichtig, dass die Reihenfolge mit der Collection übereinstimmt.
Leider bin ich im Moment ratlos was ich wie verwenden soll...
Grüße detrix
Hallo detrix,
das kommt wohl ganz auf das Datenmodel drauf an. Wenn ich die Grafik richtig verstehe, möchtest du Hauptsächlich mit der IP arbeiten. Also wäre mein vorschlag ein Dictonary<IP, List<ClientInfo>> (oder so ähnlich), da du so schnell auf die Liste aller Clients zugreifen kannst, welche zu einer bestimmten IP gehören.
Gruss
Friedel
Ohne Ziel ist auch der Weg egal.
hallo,
ich würds wohl so machen:
Dictionary<string, Teigeneklasse>
string = ip
und für den rest ne eigene klasse schreiben, die dann die ganzen daten beinhaltet!
ich nehm an, dass die datei etwa so aufgebaut ist:
"ip - die ganzen daten"
dann hättest du ja auch die selbe reihenfolge
mfg
//edit: grml da war wohl einer ein wenig schneller ;D
If you don't like me for who I am, then you don't like me for who I am, but all you're gonna get, is who I am.
Ich würde für Erstmal zwei Klassen erstellen: Die erste entspricht der IP und die zweite Klasse den Feldern.
Es kommt zum einen auf die Datenstruktur deiner Textdatei an und zum anderen, wie du darauf zugreifen willst.
Mit
List<IP> Collection;
und
class IP
{
List<Dataobject> Dataobjects;
string IP;
}
kannst du mit einem Numerischen Index auf die Elemente zugreifen. Die Reihenfolge bleibt dabei erhalten.
Wenn jede IP einmalig ist, könntest du auch ein Dictionary mit einer List kombinieren:
Dictionary<string, List<Dataobject>> IPs;
Willst die Daten in den Unteren Kästchen einzelnd und ohne Typenspezifizierung speichern, weil es nicht immer die selben Felder sind, kannst du sowas benutzen:
Dictionary<string, List<Dictionary<string,string>>> IPs;
IP Datenkästen Typ Wert
Das berte wär ein Ausschnitt aus deiner Datei, dann kann man dir am Besten helfen....
// Jetzt hab ich wohl zu lang gebraucht, diesen Text zu schreiben ..... 😁
Hallo,
danke erstmal für die schnellen Antworten. =)
Es geht dabei um den Apache Access-Log, den ich zeilweise einlese und jeweils in einzelne Bestandteile zerlege. Dabei soll das ganze anhand der IP-Adressen gruppiert werden.
Hier mal ein paar Zeilen:
195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
195.146.134.16 - - [20/Jan/2003:08:54:29 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
195.146.134.15 - - [20/Jan/2003:08:54:30 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
195.146.134.15 - - [20/Jan/2003:08:52:00 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
195.146.134.16 - - [20/Jan/2003:08:51:59 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
195.146.134.17 - - [20/Jan/2003:08:51:20 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
Das ganze soll folgendermaßen aufgelistet werden:
Host: 195.146.134.15
Host: 195.146.134.16
Host 195.146.134.17
Wobei Info jeweils das Datum, die Dateigröße, den Browser, etc. enthält.
Folgenen Ansatz würde ich bevorzugen:
Dictionary<string, List<Infos>> Hosts;
Das Problem ist aber, dass die IP-Adressen in der Log-Datei nicht der Reihenfolge geordnert sind. Wenn nun schon eine IP-Addresse in dem Dictionary existiert, weiß ich nicht wie ich in der Liste "Infos" einen weiteren Eintrag hinzufügen kann, wenn die IP-Addresse nocheinmal auftaucht.
Grüße detrix
Hallo detrix,
if (!dict.ContainsKey (ip)) {
dict [ip] = new List <Info> ();
}
dict [ip].Add (info);
BTW: Klassennamen sollten immer in der Einzahl heißen, also Info stat Infos.
herbivore
oder noch einfacher:
dict [ip] = info;
das löst keine exception aus wenn der wert schon drinn ist.
loop:
btst #6,$bfe001
bne.s loop
rts
Hallo 0815Coder,
ja, aber er will ja die Informationen sammeln. Nicht überscheiben.
herbivore
ach ich hab den teil mit der List<> überlesen.
loop:
btst #6,$bfe001
bne.s loop
rts