2017-04-19 1 views
0

Hi Ich bin neu in der Programmierung und muss Daten für mein Schulprojekt extrahieren. Die Daten kommen von einem Arduino-Gerät, das Daten sendet, die so aussehen.Eingehende Daten zwischen spitzen Klammern in Netbeans teilen

<call_sign>IVV-HAM</call_sign> 
<mission_call>ARP</mission_call> 
<absolute_time>13:13:13</absolute_time> 
<elapsed_time>43</elapsed_time> 
<imu_accel_x>240</imu_accel_x> 
<imu_accel_y>196</imu_accel_y> 
<imu_accel_z>62</imu_accel_z> 
<imu_gyro_x>599</imu_gyro_x> 
<imu_gyro_y>1013</imu_gyro_y> 
<imu_gyro_z>215</imu_gyro_z> 
<imu_mag_x>402</imu_mag_x> 
<imu_mag_y>495</imu_mag_y> 
<imu_mag_z>447</imu_mag_z> 
<imu_temp>453</imu_temp> 

Ich muss die ersten drei Zeilen loswerden und dann den restlichen Code senden, um grafisch dargestellt zu werden. Ich habe versucht, die spitzen Klammern zu trennen und zu teilen, aber nichts, was ich zu tun weiß, scheint zu funktionieren. Jede Hilfe oder Vorschläge, wo ich eine Antwort finden kann (ich habe schon seit einem Tag hier gesucht) wäre dankbar, danke.

public void run(){ 
        //create a new Scanner and connect it to the Serial Port 
        input = new Scanner(connectedPort.getInputStream()); 
        //HERE I tried to use input.useDelimiter("></") 
        // I also tried to split by creating a string.split but 
        // it did not work either. 
        //loop indefinitely until you get data from the Serial Port 
        while(input.hasNextLine()){ 
         //get line of text from serial port 
         String line = input.nextLine(); 

         //dump the raw data to the output text area 
         //taRawOutput.append(Integer.toString(number)+'\n'); 
         textArea_RawData.append(line+"\n"); 
        }//end of loop 

        //close the scanner object reading from the serial port 
        input.close(); 
       }//end of methd run() 
      };//end of inner class definition 

      //start the thread that was just defined running 
      thread.start(); 

     }catch(IOException e){ 
      JOptionPane.showMessageDialog(this, e.getMessage()); 
     }//end of catch block 
    } 

Ich habe versucht, die Frage zu bearbeiten, um zu zeigen, was ich getan habe.

+0

bitte zeigen Sie uns, was Sie versucht haben –

+0

PS sieht aus wie XML –

+0

Nach dem "neuen Scanner" habe ich versucht, ein Delimiter zu verwenden, ging als "input.useDelimiter (">

Antwort

1

Sie müssen vor eine offene Klammer teilen, aber nicht, wenn es von einem Schrägstrich gefolgt wird. Und Sie brauchen den Split, um die Klammer nicht zu verbrauchen. All dies kann mit einem Look Ahead getan werden.

Try this:

scanner.useDelimiter("(?=<[^/])"); 

Dann jedes Mal, wenn Sie anrufen scanner.next() Sie in einem ganzen Tag gelesen werden.

Der reguläre Ausdruck bedeutet „Die folgenden Zeichen sind ein < dann ein Zeichen, das nicht ein Schrägstrich ist“, und es wird keine des Eingangs verbrauchen (das Spiel ist, mit Null-Länge, zwischen tatsächlich Zeichen)

+1

Keine Erklärungen, nur ein fortgeschrittener Regex auf einen Neuling geworfen. Ernsthafte Frage: Wenn Sie in Ihrer Moderatorrolle auf eine solche Antwort stoßen würden, was würden Sie dagegen tun? – GhostCat

+1

@GhostCat, bevor Sie voreilige Schlüsse ziehen, war ich in einem sehr schlechten mobilen Empfangsbereich und konnte den Erklärungsteil nicht posten (hielt Zeit hinaus). Mein erster Sendeversuch ist verstorben, also habe ich es nochmal (von Grund auf) versucht. Jetzt, wo ich wieder online bin, habe ich eine richtige Antwort geschrieben. Wenn ich das Original sehen würde, würde ich wahrscheinlich das Plakat bitten, es zu erklären. – Bohemian

+0

Danke. Macht Sinn. – GhostCat

0

Ich entschied mich, auf einen Begrenzten zu verzichten und einen Vektor mit einem "indexOf ("> ") + 1, lastIndexOf (" < ") zu verwenden, von dem ich weiß, dass es veraltet ist, aber es funktioniert für meinen Zweck. Es enthält die Daten, die ich brauche, und kann zu verschiedenen Graphen gesendet werden, die ich brauche. Vielen Dank für Ihre Hilfe, aber ich schätze es.

Verwandte Themen