Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 00:12

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Closed Thread
 
Old   #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:


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

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?
€clips3 is offline  
Old 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 View Post
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?
Mostey is offline  
Old 02/25/2014, 21:08   #3


 
MrSm!th's Avatar
 
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.
MrSm!th is offline  
Old 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 View Post
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
Code:
server = localhost
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.
€clips3 is offline  
Old 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.
Mostey is offline  
Old 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 View Post
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.
€clips3 is offline  
Old 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.
Mostey is offline  
Old 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 View Post
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
€clips3 is offline  
Old 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 View Post
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");
Mostey is offline  
Old 02/26/2014, 07:58   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Originally Posted by MrSm!th View Post
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 View Post
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 View Post
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.
MrSm!th is offline  
Old 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 View Post
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.
€clips3 is offline  
Old 02/27/2014, 19:44   #12

 
x]vIrus[x's Avatar
 
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:
x]vIrus[x is offline  
Thanks
1 User
Old 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
Popicker is offline  
Thanks
3 Users
Old 02/28/2014, 10:52   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
Quote:
Originally Posted by x]vIrus[x View Post
falls das noch keiner gemacht hat...
hier ist beschrieben wie man in c# settings macht, richtig:
Meh, die Standardlösung is nicht so bombe.
MrSm!th is offline  
Closed Thread


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.