2017-01-12 1 views
0

Ich habe in der Lage, die Daten des Indikators auf meinem Computer zu zeigen,C# Lesen Sie serielle Schnittstelle Gewicht Kardinalskala 210

die Ausgabe aussehen wie-diese

„[SPACE] [SPACE] 978 0Kg“

[sPACE] ist Raum, um Text (leer)

ich nur Zahlen angezeigt werden soll,

Ich benutze das folgende Skript.

private delegate void Closure(); 
    private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs) 
    { 
     if (InvokeRequired)  //<-- Makes sure the function is invoked to work properly in the UI-Thread 
      BeginInvoke(new Closure(() => { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); }));  //<-- Function invokes itself 
     else 
     { 
      while (_serialPort.BytesToRead > 0) //<-- repeats until the In-Buffer is empty 
      { 
       String tampung = _serialPort.ReadExisting(); 
       Regex regex = new Regex(@"[^\d|\.]"); 

       tampung = regex.Replace(tampung, ""); 


       textBox1.Text += string.Format("{0:X2} ", tampung); 
      } 
     } 
    } 

aber es zeigt unvollständige Zahlen, die letzte Zahl Null nicht geben

Ausgang:

ich verwende Indikator http://www.cardinalscale.com/cs_product/210-storm/

Ist stimmt etwas nicht?

Antwort

0

Sie können Regex verwenden, um die Zahlen aus der Zeichenfolge zu extrahieren, und dann Trim, um Leerzeichen zu entfernen.

string input = " 940 0Kg"; 
string result = Regex.Replace(input, @"[^\d]", "").Trim(); 

Und wenn Sie es als eine Zahl benötigen, natürlich

int weight = int.Parse(result); 
0

ersetzen

String tampung = _serialPort.ReadExisting(); 
Regex regex = new Regex(@"[^\d|\.]"); 

mit

string tampung = _serialPort.ReadExisting(); 
string pattern = @"(\d+\.\,\d+)"; 
MatchCollection matches = Regex.Matches(tampung, pattern); 
Verwandte Themen