using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication1
{
class Config
{
Dictionary<string, string> config = new Dictionary<string, string>();
public void Load(string filename)
{
//1) First read the file line by line:
System.IO.StreamReader sr = new System.IO.StreamReader(filename);
string line = "";
while ((line = sr.ReadLine()) != null)
{
//2) Ignore lines that start with #
if (line[0] == '#') continue;
//3) Split the lines by = into key and value
string[] blocks = line.Split('=');
if (blocks.Length > 1)
{
//4) Trim the key by all spaces ( optional for value)
blocks[0] = blocks[0].Trim();
//5) Store the value in a dictionary(or a list, but a dictionary has a lot options)
config.Add(blocks[0], blocks[1]);
}
}
sr.Close();
}
}
}
Dieser öffnet mir die Datei "filename" aus dem Programmordner und liest daraus Beispielsweise
Code:
#ignore
x=1
y=2
myValue = 1 aus mithilfe
Code:
string myValue = config["x"];
So...
Jetzt habe ich das ganze als Klasse benutzt um es in mehreren Projekten Dynamisch zu benutzen.
Ebenso möchte ich eine Zweite Klasse anlegen
Config wurde bei der Definition groß geschrieben, kein Wunder das er da nichts findet. Du musst die Klasse schon richtig nutzen - ich habe lediglich dein Beispiel verwendet.
Und der Namespace spielt natürlich auch ne Rolle sofern es sich in der benutzten Funktion nicht um den selben handelt.
Config wurde bei der Definition groß geschrieben, kein Wunder das er da nichts findet. Du musst die Klasse schon richtig nutzen - ich habe lediglich dein Beispiel verwendet.
Und der Namespace spielt natürlich auch ne Rolle sofern es sich in der benutzten Funktion nicht um den selben handelt.
Selber Namespace ist es.
Nein, ist schon richtig so.
Schau nochmal genau.
"Config" nennt sich die Klasse selbst.
"config" ist der/die/das was weiß ich... Dictionary.
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApplication1
{
class Config
{
Dictionary<string, string> config = new Dictionary<string, string>();
public void Load(string filename)
{
//1) First read the file line by line:
System.IO.StreamReader sr = new System.IO.StreamReader(filename);
string line = "";
while ((line = sr.ReadLine()) != null)
{
//2) Ignore lines that start with #
if (line[0] == '#') continue;
//3) Split the lines by = into key and value
string[] blocks = line.Split('=');
if (blocks.Length > 1)
{
//4) Trim the key by all spaces ( optional for value)
blocks[0] = blocks[0].Trim();
//5) Store the value in a dictionary(or a list, but a dictionary has a lot options)
config.Add(blocks[0], blocks[1]);
}
}
sr.Close();
}
}
}
Ich möchte jetzt über "config" aus Klasse "Config" in Klasse "MySql" einen Parameter aus der Datei auslesen.
Was mithilfe string myValue = config["x"];
100% funktionieren sollte, jedoch habe ich keinen Plan wie ich dies in Klasse "MySql" definiere.
Der Zugriff würde (ohne Namespace) via Config.config erfolgen, da hier aber weder public noch private angegeben wurde, hast du keinen Zugriff auf die Variable weil sie automatisch private ist.
Der Zugriff würde (ohne Namespace) via Config.config erfolgen, da hier aber weder public noch private angegeben wurde, hast du keinen Zugriff auf die Variable weil sie automatisch private ist.
Mag sein, das es nicht grad schlau ist, aber dafür lernt man ja um fehler zu machen
Ich probiers einfach mal.
Danke
Mag sein, das es nicht grad schlau ist, aber dafür lernt man ja um fehler zu machen
Ich probiers einfach mal.
Danke
Seit wann lernt man um Fehler zu machen?
Ich hätte die Klasse vermutlich auch Config genannt und hätte ein Handle zum File in einer Variable _hFile und die Einträge in einer Variable _Records gespeichert - unabhängig vom Datentyp weiß man so nämlich direkt, was gemeint ist.
Ist das dein Ernst? Füg dafür dem Konstruktor nen Parameter hinzu und übergib ihm config["server"] bei der Erzeugung eines MySql Objekts.
Dies
Quote:
Originally Posted by €clips3
Mag sein, das es nicht grad schlau ist, aber dafür lernt man ja um fehler zu machen
Ich probiers einfach mal.
Danke
Lass es sein. Es hat einen Grund, warum die Variable implizit private ist. Datenkapselung nennt sich das.
Und ohne ein Objekt der Klasse Config kannst du sowieso nichts mit den Daten machen, weil sie gar nicht da sind.
Wie sieht dein Code drumherum aus? Wie nutzt du die Klassen?
Quote:
Originally Posted by Mostey
Seit wann lernt man um Fehler zu machen?
Ich hätte die Klasse vermutlich auch Config genannt und hätte ein Handle zum File in einer Variable _hFile und die Einträge in einer Variable _Records gespeichert - unabhängig vom Datentyp weiß man so nämlich direkt, was gemeint ist.
Config settings = new Config("somefile.txt");
somevar = settings.Read("key");
Dass ein Objekt genau so heißt wie eine Klasse ist durchaus legitim. Allerdings würde man gemäß der Konvention hinter config eher ein Config Objekt erwarten und kein Dictionary innerhalb der Config.
Das schönste für eine Config Klasse wäre wohl das Überladen des Indexoperators, um sie wie ein Dictionary verwenden zu können. Alternativ Properties. Methoden würde ich da nicht verwenden.
Lass es sein. Es hat einen Grund, warum die Variable implizit private ist. Datenkapselung nennt sich das.
Und ohne ein Objekt der Klasse Config kannst du sowieso nichts mit den Daten machen, weil sie gar nicht da sind.
Wie sieht dein Code drumherum aus? Wie nutzt du die Klassen?
Dass ein Objekt genau so heißt wie eine Klasse ist durchaus legitim. Allerdings würde man gemäß der Konvention hinter config eher ein Config Objekt erwarten und kein Dictionary innerhalb der Config.
Das schönste für eine Config Klasse wäre wohl das Überladen des Indexoperators, um sie wie ein Dictionary verwenden zu können. Alternativ Properties. Methoden würde ich da nicht verwenden.
Ich war gestern abend echt total durch den Wind. Mir ist heute morgen mal aufgefallen was ich da überhaupt für nen Blödsinn geschrieben habe.
Ich stelle die Tage mal den jetzigen Code rein.
Habe das jetzt 1) viel schöner gelöst. 2) die Config wird nur 1x geladen wie es eig auch sein sollte.
Je nach Umfang der Konfigurationsklasse kann man durchaus darüber nachdenken Serialisierung zu verwenden. ( )
Es ist auch nicht zu empfehlen Konfigurationen in einem Dictionary zu speichern oder zumindest alle Konfigurationsindizies als Konstante vorhalten. Es arbeitet sich einfacher statt config["server"] config.Server zu schrieben. Wenn du von deinem Dictionary nicht abstand nehmen möchtest ( bspw. weil es schon implementiert ist ) kannst du auch Properties nutzen. Beispielsweise
public string Server
{
get { return configDictionary["server"]; }
}
Cost of accessing a casted variable vs. assigning the casted variable? (C#) 01/05/2011 - CO2 Programming - 5 Replies I know that in unmanaged C++, casting is at compile-time, so it's better to avoid the assignment and simply access it for all instances. However, in C#, I have no idea since I'm pretty new to it.
Überprüfen ob Variable Eine Variable ist 10/16/2010 - AutoIt - 26 Replies Hey leute ich wollte fragen ob/wie man überprüfen kann
ob eine Variable eine Variable ist z.b. so
$k = 1
$i = $k
if $i = VARIABLE Then
msgbox(0,'$i ist eine variable!!','')
endif
PS:Wp releast man nochma TuT (z.b. für metin2??)
[C++]Datei nach dem einlesen bearbeiten 09/19/2010 - C/C++ - 4 Replies Die Datei einlesen läuft perfekt.
Mein Code sieht derzeit so aus:
http://paste-code.com/paste.php?id=7TYCbczaKE
Nur hab ich keine Ahnung wie ich die Datei an meiner gewünschten Stelle ändern soll.
Ich muss einfach nur eine 1 in 1,2 ändern :<
Pixel einlesen 05/09/2010 - AutoIt - 1 Replies Hallo
ich habe folgendes Problem ich will mit der inputbox einen pixel einlesen
$pixel = InputBox ("Eingabe", "Pixeleingeben")
und dann soll die maus mir dem Befehl
MouseClick ("left", $pixel)
auf den Pixel klicken. Die eingabe soll z.B. aussehen so 333,555. Mein Problem ist nun das er den Pixel einliest aber nicht die Maus bewegt.
Ich hoffe mir kann da jemand weiter helfen :handsdown: