Announcement

Collapse
No announcement yet.

Substrings suchen und speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Substrings suchen und speichern

    Hallo bin zur Zeit mit einem Programm beschäftigt dass sms empfangen und auswerten soll. Das empfangen usw. klappt soweit ganz gut. Den sms-posteingang lass ich in einem TextArea darstellen.Das sieht dann so aus:

    AT+CMGL="REC READ"

    +CMGL: 1,"REC READ","+491791233","10/02/18,11:14:04+04"
    inhalt sms nr 1

    +CMGL: 2,"REC READ","+ 491791233","10/02/18,13:46:55+04"
    inhalt sms nr 2

    +CMGL: 3,"REC READ","+4917612342","10/02/12,11:50:34+00"
    inhalt sms nr 3

    +CMGL: 3,"REC READ","+ 491791233","10/02/12,11:50:34+00"
    inhalt sms nr n


    jede sms soll jetzt in einem string gespeichert werden. und dann später nochmal die telefonnummer, datum und inhalt in einzelne Strings. der rest ist unteressant.
    ich dachte da an irgendwas mit startsWith und endsWith um sich die Strings ruaszupicken, hab aber kein geeignetes Beispiel gefunden.
    Oder vieleicht ein ganz anderer ansatz, Helft miR! bin blutiger anfänger.
    Danke schon mal im Voraus!

    p.s.: hab jede einzelen sms farbig markiert hier. ist im programm natürlich nicht so!
    Zuletzt editiert von steffi4; 15.04.2010, 13:19.

  • #2
    Benutze die

    http://java.sun.com/j2se/1.4.2/docs/...lang.String%29

    split-Funktion um auf die einzelnen Elemente zuzugreifen. Erst alle SMSs mit Zeilenumbruch oder regl. Ausdruck, innerhalb der SMS mit Komma

    Code:
           String eingabe = "+CMGL: 1,\"REC READ\",\"+491791233\",\"10/02/18,11:14:04+04\"inhalt sms nr 1 \n\r+CMGL: 2,\"REC READ\",\"+ 491791233\",\"10/02/18,13:46:55+04\"inhalt sms nr 2 \n\r+CMGL: 3,\"REC READ\",\"+4917612342\",\"10/02/12,11:50:34+00\"inhalt sms nr 3 \n\r+CMGL: 3,\"REC READ\",\"+ 491791233\",\"10/02/12,11:50:34+00\"inhalt sms nr n";
            String[] alleSMS = eingabe.split("\\n\\r");
            for (String eineSMS : alleSMS) {
                eineSMS = eineSMS.replaceAll("inhalt", ",inhalt");
                System.out.println("Die Teilstücke der SMS: " + eineSMS);
                String[] teile = eineSMS.split(",");
                for (String einTeil : teile) {
                    System.out.println(einTeil);
    
                }
    
            }
    Zuletzt editiert von Christian Marquardt; 16.04.2010, 13:07. Reason: Zusammengefasst
    Christian

    Comment


    • #3
      Danke für die schnelle Antwort! Das klappt ja schonmal ganz gut, wie mach ich das er am anfang das
      AT+CMGL="REC READ" ignoriert. habs versucht mit replaceAll("AT+CMGL=\"REC READ\"", "");

      haut aber irgendwie nicht hin

      das problem ist auch dass der inhalt nicht immer "inhalt" heißt

      Comment


      • #4
        haut aber irgendwie nicht hin
        Ist kein Fehler
        Code:
               String eingabe = "AT+CMGL=\"REC READ\"ycsxdfsdfsfsdfs";
               eingabe = eingabe.replace("AT+CMGL=\"REC READ\"", "");
               System.out.println(eingabe);
        funktioniert einwandfrei und

        Code:
              String eingabe = "AT+CMGL=\"REC READ\"ycsxdfsdfsfsdfs";
                eingabe = eingabe.replaceAll("AT\\+CMGL=\"REC READ\"", "");
                System.out.println(eingabe);
        ebenfalls

        das problem ist auch dass der inhalt nicht immer "inhalt" heißt
        Dann ein regl. Ausdruck, der sich an :04+04" orientiert


        Christian

        Comment


        • #5
          Suchen und ersetzen von :04+04"

          Code:
                 String eingabe = ":55+04\"ycsxdfsdfsfsdfs";
                  Pattern p = Pattern.compile("(:\\d\\d\\+\\d\\d\")");
                  Matcher m = p.matcher(eingabe);
                  m.find();
                  eingabe = m.replaceAll(m.group(1) + ",");
                  System.out.println(eingabe);
          Christian

          Comment


          • #6
            hab es jetzt so versucht:
            Code:
            String eingabe = smsArea_unread.getText();
            			eingabe = eingabe.replace("AT+CMGL=\"REC READ\"", "");
            			eingabe = eingabe.replace("OK", "");
            			smsArea_unread.setText(eingabe);
            			
            			//eingabe="+CMGL: 1,\"REC READ\",\"+491791233\",\"10/02/18,11:14:04+04\"inhalt sms nr 1 \n\r+CMGL: 2,\"REC READ\",\"+ 491791233\",\"10/02/18,13:46:55+04\"inhalt sms nr 2 \n\r+CMGL: 3,\"REC READ\",\"+4917612342\",\"10/02/12,11:50:34+00\"inhalt sms nr 3 \n\r+CMGL: 3,\"REC READ\",\"+ 491791233\",\"10/02/12,11:50:34+00\"inhalt sms nr n";
            	        String[] alleSMS = eingabe.split("\\n\\r");
            	        for (String eineSMS : alleSMS) {
            	            eineSMS = eineSMS.replaceAll("+\\d\\d\"\n\\*\n", ",+\\d\\d\"\n\\*\n");
            	            smsArea_read.setText("Die Teilstücke der SMS: " + eineSMS);
            	            String[] teile = eineSMS.split(",");
            	            for (String einTeil : teile) {
            	            	smsArea.setText(einTeil);
            	            }
            dabei kommt folgende fehlermeldung raus:
            Code:
            Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
            +\d\d"
            \*
            
            ^
            	at java.util.regex.Pattern.error(Unknown Source)
            	at java.util.regex.Pattern.sequence(Unknown Source)
            	at java.util.regex.Pattern.expr(Unknown Source)
            	at java.util.regex.Pattern.compile(Unknown Source)
            	at java.util.regex.Pattern.<init>(Unknown Source)
            	at java.util.regex.Pattern.compile(Unknown Source)
            	at java.lang.String.replaceAll(Unknown Source)
            	at fern.AbfrageFrame$ButtonSave1Listener.actionPerformed(AbfrageFrame.java:422)
            	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
            	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
            	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
            	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
            	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
            	at java.awt.Component.processMouseEvent(Unknown Source)
            	at javax.swing.JComponent.processMouseEvent(Unknown Source)
            	at java.awt.Component.processEvent(Unknown Source)
            	at java.awt.Container.processEvent(Unknown Source)
            	at java.awt.Component.dispatchEventImpl(Unknown Source)
            	at java.awt.Container.dispatchEventImpl(Unknown Source)
            	at java.awt.Component.dispatchEvent(Unknown Source)
            	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
            	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
            	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
            	at java.awt.Container.dispatchEventImpl(Unknown Source)
            	at java.awt.Window.dispatchEventImpl(Unknown Source)
            	at java.awt.Component.dispatchEvent(Unknown Source)
            	at java.awt.EventQueue.dispatchEvent(Unknown Source)
            	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
            	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
            	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
            	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
            	at java.awt.EventDispatchThread.run(Unknown Source)
            danke nochmal!

            Comment


            • #7
              Siehe Beitrag 5

              ein replace oder replaceAll der Klasse String kann hier nicht genutzt werden, da du ja das, was du replacen willst auch wieder reinsetzen willst
              Christian

              Comment


              • #8
                ok

                ok, wenn ich das jetzt so mach
                Code:
                String eingabe = smsArea_unread.getText();
                			eingabe = eingabe.replace("AT+CMGL=\"REC READ\"", "");
                			eingabe = eingabe.replace("OK", "");
                			//Suchen und ersetzen von :04+04"
                			 Pattern p = Pattern.compile("(:\\d\\d\\+\\d\\d\")");
                	            Matcher m = p.matcher(eingabe);
                	            m.find();
                	            eingabe = m.replaceAll(m.group(1) + ",");
                	            
                			smsArea_unread.setText(eingabe);
                			
                			//eingabe="+CMGL: 1,\"REC READ\",\"+491791233\",\"10/02/18,11:14:04+04\"inhalt sms nr 1 \n\r+CMGL: 2,\"REC READ\",\"+ 491791233\",\"10/02/18,13:46:55+04\"inhalt sms nr 2 \n\r+CMGL: 3,\"REC READ\",\"+4917612342\",\"10/02/12,11:50:34+00\"inhalt sms nr 3 \n\r+CMGL: 3,\"REC READ\",\"+ 491791233\",\"10/02/12,11:50:34+00\"inhalt sms nr n";
                	        String[] alleSMS = eingabe.split("\\n\\r");
                	        for (String eineSMS : alleSMS) {
                	            //eineSMS = eineSMS.replaceAll("+\\d\\d\"\n\\*\n", ",+\\d\\d\"\n\\*\n");
                	        	
                	           
                	            //System.out.println(eingabe);
                	            
                	            smsArea_read.setText("Die Teilstücke der SMS: " + eineSMS +"\n\n");
                	            String[] teile = eineSMS.split(",");
                	            for (String einTeil : teile) {
                	            	
                	            	smsArea.setText(teile[0]);
                gibt er für "Die Teilstücke der SMS: " + eineSMS +"\n\n");
                das hier aus
                Code:
                Die Teilstücke der SMS: 
                +CMGL: 1,"REC READ","+491791234",,"10/02/18,11:14:04+04",
                Low Pressure: Major Leak.
                +CMGL: 2,"REC READ","+491791234",,"10/02/18,13:46:04+04",
                High Pressure: No Switching.
                +CMGL: 3,"REC READ","+491791234",,"10/02/12,11:50:04+04",
                Time Out Failure: Compressor.
                +CMGL: 4,"REC READ","+491791234",,"10/02/12,16:20:04+04",
                Pilot Value 1 Circiut.
                +CMGL: 5,"REC READ","+491791234",,"10/02/18,11:14:04+04",
                Pilot Value 2 Circiut.
                +CMGL: 6,"REC READ","+491791234",,"10/02/18,13:46:04+04",
                73% Shutdown; Low O2.
                +CMGL: 7,"REC READ","+491791234",,"10/02/12,11:50:04+04",
                PE Valve Coil.
                +CMGL: 8,"REC READ","+491791234",,"10/02/12,16:20:04+04",
                EEPROM Failure.
                +CMGL: 9,"REC READ","+491791234",,"10/02/12,11:50:04+04",
                RAM Failure.
                +CMGL: 0,"REC READ","+491791234",,"10/02/12,16:20:04+04",
                Low Pressure: Major Leak.
                und für
                Code:
                 smsArea.setText(teile[0]);
                tatsächlich das erste teilstück also
                Code:
                +CMGL: 1
                meine frage ist: wie ermittle ich die anzahl der substrings?

                Comment


                • #9
                  Ich verstehe die Frage nicht

                  String[] teile = eineSMS.split(",");

                  ggf.

                  teile.length()

                  Mal die Codevervollständigung ansehen?
                  Christian

                  Comment


                  • #10
                    ok so langsam hab ich das was ich will. kannst du mir erklären wie das mit dem group(1) funktioniert? aus der hilfe werd ich nicht richtig schlau.
                    ich möchte vor jedes +CMGL auch ein komma setzen. da er sonst den inhalt der sms mit dem nächsten +CMGL: 2 gruppiert.
                    codevervollständigung war aus irgendeinem grund deaktiviert. danke nochmal für die ausführliche hilfe und entschuldige meine begriffsstutzigkeit

                    Comment


                    • #11
                      String eingabe = ":55+04\"ycsxdfsdfsfsdfs";
                      Die Eingabe, die durchsucht werden soll

                      Pattern p = Pattern.compile("(:\\d\\d\\+\\d\\d\")");
                      Der reguläre Ausdruck. Mit den Klammern wird eine Gruppe definiert

                      Matcher m = p.matcher(eingabe);
                      Dem Matcher die Eingabe mit dem Ausdruck bekannt machen

                      m.find();
                      Der Matcher durchsucht die Eingabe nach dem regl. Ausdruck

                      eingabe = m.replaceAll(m.group(1) + ",");
                      Der Matcher ersetzt die gefundenen Stellen, wobei das, was in der Gruppe 1 gefunden wird wieder mit reingesetzt wird. Group ist 1, weil 0 der gesamte Eingabestring ist
                      Christian

                      Comment

                      Working...
                      X