Laden...

Welche Collection soll ich verwenden

Erstellt von detrix vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.539 Views
D
detrix Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren
Welche Collection soll ich verwenden

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

830 Beiträge seit 2005
vor 16 Jahren

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.

T
94 Beiträge seit 2006
vor 16 Jahren

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.

738 Beiträge seit 2007
vor 16 Jahren
P
56 Beiträge seit 2006
vor 16 Jahren

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 ..... 😁

D
detrix Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

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

  • Info aus Zeile 1
  • Info aus Zeile 3
  • Info aus zeile 4

Host: 195.146.134.16

  • Info aus Zeile 2
  • Info aus Zeile 5

Host 195.146.134.17

  • Info aus Zeile 6

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

0
767 Beiträge seit 2005
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo 0815Coder,

ja, aber er will ja die Informationen sammeln. Nicht überscheiben.

herbivore

0
767 Beiträge seit 2005
vor 16 Jahren

ach ich hab den teil mit der List<> überlesen.

loop:
btst #6,$bfe001
bne.s loop
rts

D
detrix Themenstarter:in
17 Beiträge seit 2007
vor 16 Jahren

Vielen Dank! Hab das ganze nun erfolgreich umgesetzt. =)

Grüße detrix