string oder txt file in enum

A

anfänger_fler

Hallo
Ich möchte ein text file einlesen und dessen werte in ein enum übernehmen.
Format textfile:
iomodul_h=0x00
iomodul_l=0x0b
wetter_h=0x00
wetter_l=0x0c
...
...
...

hierbei handelt es sich um adressen die ich im Programm weiterverarbeiten möchte.

ich habe bis jetzt das textfile eingelesen und die werte im format "iomodul_h=0x00, iomodul_l=0x0b, ...." in neinen string geschrieben bis hierher geht es noch da ich mir diesen string am display ausgeben lasse.
nur wie kann ich nun die werte in ein enum übernehmen in der Form enum ADDR : int {iomodul_h = 0x00, iomodul_l=0x0b, ...}
Die modulnamen und dessen Adresse (max bis 255) können verschieden sein, desswegen möchte ich sie von einem file einlesen.
die weiterverarbeitung wäre dann mit ADDR.iomodul_h möglich
Ich programmiere das mit visualstudio 2005 C# für WINCE Plattform.
Für hilfe wäre ich dankbar.
mfg fler
 
Ein enum kann man dafür nicht verwenden. Ich glaube, du suchst eine Art assoziatives Array. Die Klasse Hashtable wäre wohl das geeignetste für dich. Dort kannst du z.B. iomodul_h als Schlüssel verwenden, und 0x00 wäre dann der zugeordnete Wert. Eine Einführung in dieses Thema findest du beispielsweise im Galileo OpenBook zu C# (kann man auch herunterladen). Oder schau in deinen Unterlagen mal unter dem Stichwort Settings nach.
 
Hallo
Danke für die Anwort, ich bin schon drauf gekommen das ich in die falsche richtung gesucht habe, auf Hash bin ich auch schon gekommen und habe danach gesucht.
jedoch hat noch nichts funktioniert was ich compiliert habe.
Deshalb bitte ich dich mir ein codebeispiel zu schreiben.
Im txt file habe ich nun folgendes drinnen
wetter_h,00
wetter_l,0b
.
.
mit stringspliter habe ich das file in eine string array geschrieben, ob das brauchbar ist weis ich auch nicht.
ich möchte sozusagen vom fileinhalt zeilenweise den hexwert nach dem beistrich in byte vor dem beistrich stehen haben.
mfg
 
jedoch hat noch nichts funktioniert was ich compiliert habe.
Das hättest du mal zeigen können.
Deshalb bitte ich dich mir ein codebeispiel zu schreiben.

Ein einfaches Beispiel:
C#:
string [] lines = System.IO.File.ReadAllLines("datei.txt");
Dictionary<string,byte> data = new Dictionary<string,byte>();

foreach( string s in lines )
{
    string [] parts = s.Split(',');
    
    if( parts.Length == 2 )
    {
        byte byteVal;
        
        if( byte.TryParse(parts[1], System.Globalization.NumberStyles.HexNumber, null, out byteVal) )
        {
            data[parts[0]] = byteVal;
        }
    }
}
Gruß
MCoder
 
Wenn es nur um eine Konvertierung von einem Dateiformat in ein anderes geht, ist die Frage, ob C# wirklich das Richtige für dich ist. Ich persönlich würde dafür ein AWK-Skript oder ein BeanShell-Makro für JEdit schreiben.
 
HAllo
Ich schreibe eine kleine Software für ein Touchdisplay auf dem WinCE lauft.
Die daten bekommt das display über einen RS485 Bus von diversen Modulen die am Bus hängen.
mit dem TXT file möchte ich die Busadressen vergeben.
diese hexzahlen sind die Adressen der diversen Module am Bus.
Hier schreibe ich je nach menü.onclick die daten in einen byte array die ich dann sende.
An der stelle wo die Adresse des Modules sein soll möchte ich die daten des Files einsetzen.
leider bin ich im moment noch ohne Erfolg.

Beispiel:
send_data[0] = 0x53;
send_data[1] = Modulhash.Contains("wetter_h");
send_data[2] = Modulhash.Contains("wetter_l");
send_data[3] = 0x01;
send_data[4] = 0x00;
send_data[5] = 0x5f;
WriteData(send_data, send_data.Length);



string[] lines = System.IO.File.ReadAllLines("Flashdisk\address.txt");
Dictionary<string, byte> data = new Dictionary<string, byte>();
foreach (string s in lines)
{
string[] parts = s.Split(',');
if (parts.Length == 2)
{
byte byteVal;
if (byte.TryParse(parts[1], System.Globalization.NumberStyles.HexNumber, null, out byteVal))
{
data[parts[0]] = byteVal;
}
}
}
 
Hallo
Wie würden dann diese zeilen heißen?
send_data[1] = Modulhash.Contains("wetter_h");
send_data[2] = Modulhash.Contains("wetter_l");

Compact Framework 2.0
Beim compilieren des oben genannten Code bekomme ich folgende Fehlermeldung:
Form1.cs(228,46): error CS0117: 'System.IO.File' does not contain a definition for 'ReadAllLines'
\Form1.cs(236,31): error CS0117: 'byte' does not contain a definition for 'TryParse'

mfg
 
Hallo,

das .NET Compact Framework implementiert leider nicht alle Methoden, so dass du Alternativen suchen musst.
Zum zeilenweisen Einlesen einer Datei kann man die Forensuche bemühen, die z.B. diesen Beitrag findet: http://www.tutorials.de/forum/net-archiv/150260-dateiarbeit.html

Und wenn TryParse nicht unterstützt wird, kann man mit Parse arbeiten:
C#:
try
{
    byte byteVal = byte.Parse(parts[1], System.Globalization.NumberStyles.HexNumber);
    data[parts[0]] = byteVal;
}
catch( Exception ex )
{
    // ungüliger String für Konvertierung
}
Gruß
MCoder
 
Hallo
Danke für die Hilfe es lauft. Ich habe es nun so gemacht:
Code:
public void Init()
        {
            
            count = 0; m_merk = 255;
            Error_Recieved_Event_CNT = 0;
            Pin_Changed_Event_CNT = 0;
            read_data = new byte[4096];
            send_data = new byte[6];
            rec_data = new byte[20];


            
            try
            {
                if (_SP == null)
                {
                    _SP = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
                    _SP.ReadTimeout = 60; // 5ms Lese-Timeout
                    _SP.WriteTimeout = 20; // 5ms Schreib-Timeout
                    _SP.Handshake = Handshake.None;
                    _SP.DtrEnable = true;
                    _SP.RtsEnable = true;
                    _SP.ErrorReceived += new System.IO.Ports.SerialErrorReceivedEventHandler(ErrorRecieved);
                    _SP.PinChanged += new System.IO.Ports.SerialPinChangedEventHandler(PinChanged);
                    _SP.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(DataRecieved);
                    _SP.Open();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show("Fehler beim Initialisieren der seriellen Schnittstelle!  " + exc.Message);
            }
            string filePath = @"FlashDisk\address.txt";
            string line;
            addr_str = "";
            if (File.Exists(filePath))
            {
                StreamReader file = null;
                try
                {
                    file = new StreamReader(filePath);
                    while ((line = file.ReadLine()) != null)
                    {
                        addr_str = addr_str + line + ",";
                        lbl_receive.Text = addr_str;

                    }
                }

                finally
                {

                    string[] parts = addr_str.Split(',');


                    for (int i = 0; i < parts.Length - 1; i += 2)
                    {
                        data[parts[i]] = byte.Parse(parts[i + 1], System.Globalization.NumberStyles.HexNumber, null);
                    }


                    if (file != null)
                        file.Close();
                }

            }


            else
            {
             //   File.Create(filePath);
                try
                {

                    //Pass the filepath and filename to the StreamWriter Constructor
                    StreamWriter sw = new StreamWriter(filePath);

                    //Write a line of text
                    sw.WriteLine("wetterh,00");

                    //Write a second line of text
                    sw.WriteLine("wetterl,0b");
                    //Write a line of text
                    sw.WriteLine("albedoh,00");

                    //Write a second line of text
                    sw.WriteLine("albedol,0c");
                    //Write a line of text
                    sw.WriteLine("futush,00");

                    //Write a second line of text
                    sw.WriteLine("futusl,0d");
                    //Close the file
                    sw.Close();
                }
                catch (Exception e)
                {
                    lbl_receive.Text = e.Message; 
                }
                finally
                {
                    Init();
                }

            }
        }
 
Zuletzt bearbeitet:
Zurück