C# dynamische Speicherverwaltung für eingelesene Dateien

Wolly300

Lieutenant
Registriert
Mai 2014
Beiträge
514
Hallo zusammen,

ich mache mir gerade Gedanken über die Speicherverwaltung meines aktuellen Projektes.
Ich hoffe ich erkläre es jetzt nicht zu kompliziert.

Sachstand:

-Ich lasse mit meinem Programm alle Textdateien aus einem Ordner auslesen.

-Der Inhalt der Dateien sieht ungefähr folgendermaßen aus:

Name: Beispiel1

Werte1:
Test3 = 1
Test2 = 3
Test1 = 2

Werte2
...
...
...

Befehle:
XXX
XXX
XXX
XXX

Die Datei lese ich ein und hol mir mit Regex die gewünschten Zeilen raus.

- Jetzt ist es so, das die Namen aus allen Dateien in eine DropDownBox geschrieben werden.
Je nach dem, welchen Namen man auswählt, sollen in den anderen DropDownBoxen die andreren Werte geladen werden.
Am Ende sollen je nach ausgewählten Namen, die Befehle der jeweiligen Datei "ausgeführt" werden.

Meine Problem ist hierbei, das ich nicht weiß, wie ich die ganzen Strings am besten speichere.
Da die Länge der einzelnen Dateien unterschiedlich ist, hätte ich für alles eine eigene ArrayList oder List gerne verwendet(also Namen aller Datei, und dann jeweils für jede Datei, Werte1, Werte2 und Befehle in eine extra Liste geschrieben).

Ist das so möglich mit C#, dynamisch Variablen zu erstellen ?

Danke für die Hilfe
 
Sehe ich ähnlich. Mit einem Dictionary kannst du ein key-value-pair aus dem Namen (key) und dem Werte-Array (value) erstellen und anschließend einfach vom Dictionary über den Namen das dazugehörige Array rausholen.
 
Einfach: KeyValuePair. Deluxe: Dictionary.

Da ja bei dir alles Strings sind, wäre z.B. sowas denkbar:
C#:
class Value2Command{
  List<string> Werte1;
  List<string> Werte2;
  List<string> Befehle;
  Value2Command()
  {
    Werte1 = new List<string>();
    Werte2 = new List<string>();
    Befehle = new List<string>();
  }
}
Dictionary<string,Value2Command> myCustomList = new Dictionary<string,Value2Command>();
myCustomList.Add("Beispiel1",new Value2Command());
myCustomList["Beispiel1"].Werte1.Add("Test3 = 1");
myCustomList["Beispiel1"].Werte1.Add("Test2 = 3");
myCustomList["Beispiel1"].Werte1.Add("Test1 = 2");
myCustomList["Beispiel1"].Befehle.Add("XXX");
myCustomList["Beispiel1"].Befehle.Add("XXX");
myCustomList["Beispiel1"].Befehle.Add("XXX");
myCustomList["Beispiel1"].Befehle.Add("XXX");
Es gibt auch Tausend andere Varianten, das umzusetzen. Du könntest auch die strings noch weiter aufteilen - dann halt keine Liste von strings, sondern eine Liste von anderen Datentypen. Grenzen gibt es hier keine :)
 
Ja ein Dictionary würde ich auch nehmen. Ich würde aber den Value noch über Lazy<T> kapseln und dann bei Bedarf (bei dir warscheinlich bei Click auf einen Wert in dem Dropdown) erst eine bestimmte Datei auslesen.

Sprich sowas:

C#:
Dictionary<string, Lazy<Value>>
 
  • Gefällt mir
Reaktionen: new Account()
Vielen Dank für die Hilfe an alle, ich werde es jetzt mit dem Dictionary machen.
Ergänzung ()

Zonk91 schrieb:
Ja ein Dictionary würde ich auch nehmen. Ich würde aber den Value noch über Lazy<T> kapseln und dann bei Bedarf (bei dir warscheinlich bei Click auf einen Wert in dem Dropdown) erst eine bestimmte Datei auslesen.

Sprich sowas:

C#:
Dictionary<string, Lazy<Value>>
Geht nicht, weil ich am Anfang alle Namen in den einzelnen Files kennen muss.
 
Wolly300 schrieb:
Vielen Dank für die Hilfe an alle, ich werde es jetzt mit dem Dictionary machen.
Ergänzung ()


Geht nicht, weil ich am Anfang alle Namen in den einzelnen Files kennen muss.

Du könntest aber trotzdem wenn du dir alle Namen geholt hast, die anderen Werte gezielt auslesen. D.h. erst wenn du auf du einen Namen klickst, dir die korrespondierenden Values ausliest und nicht alles auf einmal. Ob sich das aus Performance-Sicht rentiert hängt natürlich auch stark von der Anzahl der Dateien in dem Verzeichnis und der Größe der Datei-Inhalte ab. Nur ein kleiner Denkanstoß :)
 
Ich würde mir ein FileObject schreiben, welches jeweils eine Datei einliest und dann die jeweiligen Methoden enthält, um z.B. die Befehle oder Werte auszugeben. Die Objekte kannst du dann einfach in einer Liste speichern und je nachdem, welche ausgewählt ist, rufst du dann einfach von dem Objekt die jeweilige Methode auf.

Z.B.: fileObjects[2].GetCommands();
 

Ähnliche Themen

Zurück
Oben