Forum: Mikrocontroller und Digitale Elektronik String auf Zahlen reduzieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Antonow B. (antonow)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht lesenswert
Dimha B. schrieb:
> 700*10hoch-3

ja das ist Rauschen

von Ralf (Gast)


Bewertung
-1 lesenswert
nicht 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)


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

von npn (Gast)


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

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

von Micha (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-2 lesenswert
nicht lesenswert
Danke jungs, habe eine Alternative gefunden

von Markus L. (rollerblade)


Bewertung
-1 lesenswert
nicht 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. (stefanus)


Bewertung
-1 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht lesenswert
Dimha B. schrieb:
> Danke jungs, habe eine Alternative gefunden

Lass es uns doch wissen.

von Ozvald K. (ozvaldk)


Bewertung
0 lesenswert
nicht 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]);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.