2016-11-04 6 views
1

Ich bin auf der Suche nach einer Möglichkeit, einen String zwischen 2 Strings mit Arduino zu bekommen. Dies ist die Quelle String:Get String zwischen 2 Strings mit Arduino

Hello, my name is John Doe# and my favourite number is 32#. 

Der Ausgang muss sein:

String name = "John Doe"; //Between "name is " and "#" 
String favouriteNumber = "32"; //Between "number is " and "#" 

Wie kann dies mit Arduino erreicht werden?

Ich kann online keine Informationen dazu finden. Diese Beispiele für C funktionieren sowieso nicht. Ich verstehe, dass die Verwendung von String in Arduino nicht empfohlen wird, aber ich muss es so machen, um Dinge einfacher zu machen.

Übrigens ist diese Methode, ein '#' zu verwenden, um das Ende der Daten anzugeben, keine ideale Möglichkeit, dies zu tun, da ich möchte, dass die Eingabe menschlicher lesbar und natürlicher ist. Würde jemand bitte einen anderen Weg vorschlagen, dies auch zu tun?

Vielen Dank im Voraus!

+0

> Aber ich muss es auf diese Weise machen, um Dinge einfacher zu machen.Es ist dein Fehler: In Arduino C sind die Saiten char * sehr viel mächtiger. – datafiddler

Antwort

-1

hat gerade nach diesem gesucht und sah keine Antwort, also kochte ich einen oben. Ich bevorzuge auch die Arbeit mit String wegen der Lesbarkeit und Einfachheit des Codes. für mich ist es wichtiger als jeden letzten Tropfen Saft aus meinem Arduino quetschen.

String name = GetStringBetweenStrings("Hello, my name is John Doe# and my favourite number is 32#." ,"name is ","#"); 



String GetStringBetweenStrings(String input, String firstdel, String enddel){ 
     int posfrom = input.indexOf(firstdel) + firstdel.length(); 
     int posto = input.indexOf(enddel); 
     return input.substring(posfrom, posto); 
} 

beobachten für den ersten Fall aus seiner Ordnung, aber für die zweiten würden Sie den zweiten Filter Stachel ändern müssen „#.“ so verwendet es nicht das erste Auftreten der #

+0

Dieser Code wird eine falsche Zeichenfolge zurückgeben, wenn die gewünschte Teilzeichenfolge nicht vorhanden ist. Es funktioniert auch nicht, wenn beide Strings an jedem Ende gleich sind. –

1

Function midString finde den Teilstring, der zwischen zwei anderen Strings "Start" und "Finish" ist. Wenn eine solche Zeichenfolge nicht existiert, wird "" zurückgegeben. Ein Testcode ist ebenfalls enthalten.

void setup() { 
    test(); 
} 

void loop() { 
    delay(100); 
} 

String midString(String str, String start, String finish){ 
    int locStart = str.indexOf(start); 
    if (locStart==-1) return ""; 
    locStart += start.length(); 
    int locFinish = str.indexOf(finish, locStart); 
    if (locFinish==-1) return ""; 
    return str.substring(locStart, locFinish); 
} 

void test(){ 
    Serial.begin(115200); 
    String str = "Get a substring of a String. The starting index is inclusive (the corresponding character is included in the substring), but the optional ending index is exclusive"; 
    Serial.print(">"); 
    Serial.print(midString(str, "substring", "String")); 
    Serial.println("<"); 
    Serial.print(">"); 
    Serial.print(midString(str, "substring", ".")); 
    Serial.println("<"); 
    Serial.print(">"); 
    Serial.print(midString(str, "corresponding", "inclusive")); 
    Serial.println("<"); 
    Serial.print(">"); 
    Serial.print(midString(str, "object", "inclusive")); 
    Serial.println("<"); 
}