2011-02-17 36 views
8

Arduino ile metnin nasıl eşleştirileceğiyle ilgili bazı sorunlarım var.Arduino'da dize içindeki metin eşleştirmesi

Ben:

String tmp = +CLIP: "+37011111111",145,"",,"",0 

Ve maç için çalışıyorum:

if (tmp.startsWith("+CLIP:")) { 
    mySerial.println("ATH0"); 
} 

Ama bu olmuyor ve neden hiçbir fikrim yok.

substring'u denedim, ancak sonuç aynı. Nasıl kullanacağımı bilmiyorum ya da hiçbir şey olmuyor.

Hata nerede?

+4

nasıl ilk satırı bile (ben Arduiono/Kablolama denedim) derliyor döküm gerekir tırnak dize koyamazsınız? CLIP nedir? Çalışma/derlenebilir kod gönderebilir misiniz (örneğin mySerial'ın beyanı)? –

+0

Peter bu örnekte işe yaramayacak. Bunu sadece Arduino Seri monitörden aldığım gibi koydum. Sorunumu ** substring ** ile çözdüm, sadece herkesin bilmesine izin verin, Seri monitörde Arduino görünmüyor \ n ve \ n ve bu benim en büyük sorunumdu. – Min2liz

+0

@ Min2liz Cevabım yardımcı olsaydı. Lütfen doğru olanı kabul edebilir misiniz? – fuzz

cevap

7
bool Contains(String s, String search) { 
    int max = s.length() - search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i) == search) return true; // or i 
    } 

    return false; //or -1 
} 

Aksi takdirde sadece yapabileceği:

if (readString.indexOf("+CLIP:") >=0) 

Ben de ziyaret öneriyoruz:

https://www.arduino.cc/en/Reference/String

2

ben gotnull kodu güncellenmiştir. Beni yolda bıraktığı için teşekkürler.

Sadece arama dizgisini kısıtlıyorum, aksi takdirde alt dize işlevi her zaman doğru cevabı döndürmedi (alt satır dizgiyi sonlandırmıyorsa). Çünkü alt dizge her zaman dizenin sonuna gider.

int StringContains(String s, String search) { 
    int max = s.length() - search.length(); 
    int lgsearch = search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i, i + lgsearch) == search) return i; 
    } 

return -1; 
} 
+0

Bir şey değil, aslında bu hile yapmalı. – fuzz

2
//+CLIP: "43660417XXXX",145,"",0,"",0 
if (strstr(command.c_str(), "+CLIP:")) { //Someone is calling 
    GSM.print(F("ATA\n\r")); 
    Number = command.substring(command.indexOf('"') + 1); 
    Number = Number.substring(0, Number.indexOf('"')); 
    //Serial.println(Number); 
} //End of if +CLIP: 

Bu ben yapıyorum nasıl. Umarım yardımcı olur.

2
if (tmp.startsWith(String("+CLIP:"))) { 
    mySerial.println("ATH0"); 
} 

Yalnızca değişkeni :)

İlgili konular