Laden...

string umwandeln, Dateityp und Länge

Erstellt von WhiteTiger vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.785 Views
W
WhiteTiger Themenstarter:in
29 Beiträge seit 2004
vor 18 Jahren
string umwandeln, Dateityp und Länge

Guten Morgen,

Ich habe folgende strings 12,0 Volt ; 11,8 Volt ; 11,6 Volt usw. bis 0,0 Volt.
Ich will diese strings jetzt umwandeln (hoffe ihr versteht was ich vor habe)

string= 12,0 Volt --nach--> 12,0 --nach--> 12,0 mal 20 --nach--> das Ergebnis zu byte und ab in Array für die Übertragung per I²C an Mikrocontroller.

Als erstes muß ich das "Volt" vom string weg bekommen um nur die Zahl zu bekommen. Dachte da an "Remove(4,5)" --> tja das funktioniert gut bis 10,0 Volt, ab 9,8 ist Feierabend (mir ist klar warum)!
Man könnte jetzt natürlich die Länge des strings ermitteln und dann per if-Anweisung die Startposition für Remove anpassen --> ist das nicht zu umständlich?? Geht das einfacher?? Will ja immer die letzten 5 weg haben (Volt + Leerzeichen).

Für den Rest bin ich für Tipps dankbar! Nen string mal 20 dürfte ja nett gehen denke ich mal --> da muß ich erst umwandeln in anderen Dateityp, richtig?!

Herzlichen Dank @ all

M
1.439 Beiträge seit 2005
vor 18 Jahren

Du kannst es entweder mit System.Convert.ToSingle(Byte, Int32, je nachdem) probieren, kann sein, dass diese Methode das Volt einfach ignoriert. Oder du rufst vorher String.Replace("Volt", "") auf.

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo WhiteTiger!

Probier doch mal folgendes:



string s1 = "12,0 Volt";
string s2 = "11,8 Volt";
// ...

string[] myTempArray = new myTempArray[sAnzahl];
string[0] = s1;
string[1] = s2;
// ...

double[] myArray = new double[sAnzahl];

for (int i=0; i<sAnzahl; i++)
{
   myTempArray[i].Replace(" Volt", "");
   myTempArray[i].Replace(",",".");
   myArray[i] = Convert.ToDouble(myTempArray[i]);
}


Ist ungetestet, aber kleinere Fehler dürftest Du beheben können.

Das sollte es schon gewesen sein, oder?

Viel Spaß damit,
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

32 Beiträge seit 2005
vor 18 Jahren

In meinen Augen ist das Ausgangsformat schon recht krank. Da würde ich eher schauen, daß ich das sauberer (=maschinenlesbarer) bekomme.

Und falls das nicht geht, mit Regulären Ausdrücken das möglichste an Fehlertoleranz herausholen.

Beim Parsen dann auch die Culture beachten (Punkt und Komma)!

W
WhiteTiger Themenstarter:in
29 Beiträge seit 2004
vor 18 Jahren

Abend

@ Uwe Keim

Zitat:

In meinen Augen ist das Ausgangsformat schon recht krank

Was soll ich darunter verstehen?? Den string?? Wenn dem so ist, dann Sorry--> habe eine domainUpDown-Box wo der User den Spannungswert wählt --> da kann ich nur den Text-Wert bzw. string verwenden. Der SelectedIndex hat mir keinen Wert! Brauche einen Bezug (mal 1, 2..20) auf meinen PWM-Wert. Da bietet sich der string nur an!

Für nicht Elektroniker: PWM = Pulsweitenmodulation d.h. grob die Spannung wird in der Sekunde mehrmals ein und aus geschaltet --> damit kann man z.B. die Drehzahl von Motoren regeln je nach dem wie lange ausgeschaltet ist.

Nur als Info:

der User wählt 12,0 Volt --> an den AVR (Mikrocontroller muß ein Byte-Wert von 240 übertragen werden! Immer Spannung mal 20).

Bitte bin immer für bessere Lösungen offen.

@ all danke an euch --> teste das morgen.

D
58 Beiträge seit 2005
vor 18 Jahren

Ich würde das ungefähr wie folgt machen:


public class CVolt
    {
        private float volt;

        public float Volt
        {
            get { return this.volt; }
            set { this.volt = value; }
        }

        public CVolt()
        {
        }

        public CVolt(float volt)
        {
            this.volt = volt;
        }

        public override string ToString()
        {
            return string.Format("{0} Volt", volt);
        }
    }

Zum Füllen der DomainUpDown-Box:


for (float f = 12.0f; f >= 0.0f; f -= 0.2f)
            {
                this.domainUpDown1.Items.Add(new CVolt(f));
            }  

Und wenn du dann den Zugriff auf die Volt brauchst, um mit der PWM was auch immer zu machen, brauchst du nur folgendes:


            CVolt actItem = this.domainUpDown1.SelectedItem as CVolt;

Schon hast du die genauen float-Volt über actItem im Zugriff (actItem.Volt)

Hoffe was ich schreibe ist kein kompletter Blödsinn und es hilft dir weiter.

MfG

W
WhiteTiger Themenstarter:in
29 Beiträge seit 2004
vor 18 Jahren

Guten Tag

Erst mal Danke an alle.
Habe mal aus allen euren Antworten was gebastelt --> sollte funktionieren, bin am testen.

private void domainUpDown1_SelectedItemChanged(object sender, System.EventArgs e)
		{
			string PWM="";
			double test=0;
			spannungdauerbetrieb[comboBox1.SelectedIndex]=domainUpDown1.SelectedIndex;  //ist für das speichern der aktuellen Einstellungen
			PWM=domainUpDown1.Text.Replace(" Volt","");  //weg mit dem Volt
			test=Convert.ToDouble(PWM)* 20; //umwandeln des Dateityps und gleich mal 20
			pwmwerte[comboBox1.SelectedIndex]=Convert.ToByte(test);  // umwandeln in byte-Dateityp
		}

Sagt mal bitte was dazu, danke!
Ich finde es ne gute Lösung --> bin immer offen für Verbesserungen.

D
58 Beiträge seit 2005
vor 18 Jahren

Original von WhiteTiger
Ich finde es ne gute Lösung --> bin immer offen für Verbesserungen.

Ich finde meine besser 😁
Ist einfach ein sinnloser Umweg über die Konvertierung wenn der Ausgangsstring nicht extern vorgegeben ist, meiner Meinung nach.

MfG

1.271 Beiträge seit 2005
vor 18 Jahren

Also ich persönlich finde auch DivinitY's Lösung besser! Dabei kommt so richtig OOP zur Geltung. Gehen tun natürlich tausende von Lösungen.
Gruß progger

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

69 Beiträge seit 2005
vor 18 Jahren

Hi,
Ich schliesse mich DivinitY's und progger´s Lösung an. 👍
gruß
Mat