Forum: Mikrocontroller und Digitale Elektronik String auf Zahlen reduzieren


von Antonow B. (antonow)


Lesenswert?

Hallo,

wie kann ich in C# einen String auf seine Zahlen reduzieren?
Beispiel:
"C1:VDIV 700E-3 V"
hätte gerne die 700*10hoch-3. Natürlich wird bei einem Algorithmus, der 
die Zahlen im String erkennen soll, auch die eins sehen

von Antonow B. (antonow)


Lesenswert?

Dimha B. schrieb:
> 700*10hoch-3

ja das ist Rauschen

von Ralf (Gast)


Lesenswert?

Dimha B. schrieb:
> Natürlich wird bei einem Algorithmus, der
> die Zahlen im String erkennen soll, auch die eins sehen

das E vermutlich allerdings nicht, ist ja schließlich keine Ziffer. 
Deine gesuchte Funktion würde also ggf: 17003 zurückgeben. Ich glaube 
das hilft dir nicht. Prüf doch vielleicht eher mal, ob du immer die 
gleiche Zeichenfolge erwarten kannst. Dann könntest du erst trimmen und 
dann Parsen

von Stefan P. (form)


Lesenswert?

1
double Wert = Double.Parse(DeinString.Split(' ')[1], System.Globalization.NumberStyles.Float);

von npn (Gast)


Lesenswert?

Dimha B. schrieb:
> Dimha B. schrieb:
>> 700*10hoch-3
>
> ja das ist Rauschen

0,7V sind Rauschen? Denk nochmal nach...

von Micha (Gast)


Lesenswert?

Je nach Zusammensetzung der Zeichenfolge:

1.) Position 1. Leerzeichen suchen .FirstIndexOf(' ')
2.) Position 2. Leerzeichen suchen .LastIndexOf(' ')
3.) Zeichenkette dazwischen ist die gesuchte Zahl .SubString(i1, i2-i1) 
oder so ähnlich

von Thomas Z. (usbman)


Lesenswert?

Der String ist ja durch space unterteilt.

1. String in Teistrings ohne space zerlegen
2. auf jeden Teistrings atoi bzw atof anwenden
3. Prüfen ob das fehlerfrei möglich war
4. Teilstrings ohne Fehler enthalten Zahlen

So würde ich das in C machen. Wie das bei dir geht must du rausfinden. 
Micha hat dazu ja ein paar Hinweise gegeben. Dieses Grundgerüst kannst 
falls notwendig zu einem kompletten Parser für deine Strings ausbauen.

: Bearbeitet durch User
von Antonow B. (antonow)


Lesenswert?

Danke jungs, habe eine Alternative gefunden

von Markus L. (rollerblade)


Lesenswert?

Dimha B. schrieb:
> Beispiel:
> "C1:VDIV 700E-3 V"
Dabei handelt es sich offenbar um Daten eines Oszis. Das Datenformat 
sollte dokumentiert sein, etwa das da?
http://cdn.teledynelecroy.com/files/manuals/wa1k2k_remote-control_manual.pdf

Dafür schreibe man sich einen Parser, der weiß, in welcher Reihenfolge 
Zeichen, Symbole, Zahlen etc. vorkommen können. Beschrieben ist das im 
verlinkten PDF z.B. mit
[header_path:]<header>[?] [<data>,...,<data>]
Dann lassen sich die gewünschten Werte, hier data, eindeutig 
extrahieren.

> Natürlich wird bei einem Algorithmus, der
> die Zahlen im String erkennen soll, auch die eins sehen
Das wäre ein für diesen Anwendungsfall überhaupt nicht passender 
Algorithmus.

von Stefan F. (Gast)


Lesenswert?

Dimha B. schrieb:
> "C1:VDIV 700E-3 V"

Ich sehe in dem String mindestens zwei Zahlen. Offenbar brauchst du 
einen Algorithmus, dem du mitteilen kannst, welche der beiden Zahlen du 
extrahieren willst.

Es sei denn, man kann sich darauf verlassen, dass vor und hinter der 
Zahl ein Leerzeichen kommt falls die Zahl nicht ganz am Anfang oder Ende 
des Strings steht.

Man kann das mit regulären Ausdrücken erledigen oder mit verschachtelten 
Schleifen. Die Schleifen sind wahrscheinlich schneller.

von Armin K. (-donald-) Benutzerseite


Lesenswert?

Dimha B. schrieb:
> Danke jungs, habe eine Alternative gefunden

Lass es uns doch wissen.

von Ozvald K. (Gast)


Lesenswert?

Dimha B. schrieb:
> "C1:VDIV 700E-3 V"

Hallo, wenn das Format für jede Zeile stimmt, dann:

            string test = "C1:VDIV 700E-3 V";
            string[] input = test.Split(' ');
            double zahl = Convert.ToDouble(input[1]);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.