|
You last visited: Today at 00:12
Advertisement
[C#] Variable aus Datei in Klasse einlesen
Discussion on [C#] Variable aus Datei in Klasse einlesen within the .NET Languages forum part of the Coders Den category.
02/25/2014, 20:22
|
#1
|
elite*gold: 241
Join Date: Dec 2011
Posts: 1,803
Received Thanks: 1,301
|
[C#] Variable aus Datei in Klasse einlesen
Hallo,
vorgegeben habe ich folgenden Code:
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();
}
}
}
Dieser öffnet mir die Datei "filename" aus dem Programmordner und liest daraus Beispielsweise
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
Code:
class MySql
{
private MySqlConnection connection;
private string server;
private string database;
private string uid;
private string password;
//Constructor
public MySql()
{
Initialize();
}
//Initialize values
private void Initialize()
{
server = "localhost";
database = "database";
uid = "username";
password = "password";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
}
Jetzt möchte ich, dass er aus Klasse Config.cs die Variable myValue da einsetzt "localhost" steht
Code:
server = "localhost";
steht
Könnte mir jemand erklären wie das genau klappt?
|
|
|
02/25/2014, 21:07
|
#2
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by €clips3
Jetzt möchte ich, dass er aus Klasse Config.cs die Variable myValue da einsetzt "localhost" steht
Code:
server = "localhost";
steht
|
Was?
Du möchtest eine Datei auslesen in der also die Zeile "server = localhost" vorkommt und diese in die Variable für deine Datenbank Klasse schieben?
Code:
somevar = config["server"];
Wenn man das mit deiner Klasse macht - wo ist das Problem?
|
|
|
02/25/2014, 21:08
|
#3
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Ist das dein Ernst? Füg dafür dem Konstruktor nen Parameter hinzu und übergib ihm config["server"] bei der Erzeugung eines MySql Objekts.
|
|
|
02/25/2014, 21:08
|
#4
|
elite*gold: 241
Join Date: Dec 2011
Posts: 1,803
Received Thanks: 1,301
|
Quote:
Originally Posted by Mostey
Was?
Du möchtest eine Datei auslesen in der also die Zeile "server = localhost" vorkommt und diese in die Variable für deine Datenbank Klasse schieben?
Code:
somevar = config["server"];
Wenn man das mit deiner Klasse macht - wo ist das Problem?
|
Das ich angezeigt bekomme das "config" nicht gefunden wurde.
Ich möchte aus der Datei wo
steht in der MySql Klasse den Wert "localhost" einsetzen.
Sprich Klasse 1 Läd Config, Klasse 2 benötigt zugriff auf die Config, was mir jedoch den fehler rauswirft.
|
|
|
02/25/2014, 21:11
|
#5
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
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.
|
|
|
02/25/2014, 21:15
|
#6
|
elite*gold: 241
Join Date: Dec 2011
Posts: 1,803
Received Thanks: 1,301
|
Quote:
Originally Posted by Mostey
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.
|
|
|
02/25/2014, 21:19
|
#7
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Behinderte Namensgebung.
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.
|
|
|
02/25/2014, 21:21
|
#8
|
elite*gold: 241
Join Date: Dec 2011
Posts: 1,803
Received Thanks: 1,301
|
Quote:
Originally Posted by Mostey
Behinderte Namensgebung.
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
|
|
|
02/25/2014, 21:30
|
#9
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
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
|
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.
Mittels Methoden sehen Zugriffe übrigens wesentlich schöner (und sauberer aus)
Code:
Config settings = new Config("somefile.txt");
somevar = settings.Read("key");
|
|
|
02/26/2014, 07:58
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Quote:
Originally Posted by MrSm!th
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.
Mittels Methoden sehen Zugriffe übrigens wesentlich schöner (und sauberer aus)
Code:
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.
|
|
|
02/27/2014, 01:00
|
#11
|
elite*gold: 241
Join Date: Dec 2011
Posts: 1,803
Received Thanks: 1,301
|
Quote:
Originally Posted by MrSm!th
Dies
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.
|
|
|
02/27/2014, 19:44
|
#12
|
elite*gold: 37
Join Date: Apr 2004
Posts: 2,154
Received Thanks: 250
|
falls das noch keiner gemacht hat...
hier ist beschrieben wie man in c# settings macht, richtig:
|
|
|
02/28/2014, 10:13
|
#13
|
elite*gold: 50
Join Date: Oct 2005
Posts: 29
Received Thanks: 7
|
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"]; }
}
LG
|
|
|
02/28/2014, 10:52
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Quote:
Originally Posted by x]vIrus[x
falls das noch keiner gemacht hat...
hier ist beschrieben wie man in c# settings macht, richtig: 
|
Meh, die Standardlösung is nicht so bombe.
|
|
|
 |
Similar Threads
|
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:
|
All times are GMT +1. The time now is 00:13.
|
|