Hallo,
ich habe folgendes Problem:
Ich rufe mit meinem Arduino UNO und dem Ethernet Shield mithilfe von den "client.print"-Befehlen eine einfache Text-Datei aus dem Internet ab, die lediglich eine Zahl enthält, mit der ich weiterarbeiten möchte.
Allerdings schaffe ich es nicht diese Zahl in eine Variable zu schreiben. Der serial Monitor gibt folgende Zeilen aus:
HTTP/1.1 200 OK
Date: Sat, 08 Mar 2014 12:15:49 GMT
Server: Apache
Last-Modified: Sat, 08 Mar 2014 09:00:37 GMT
ETag: "692a4cd-3-4f4149a97b740"
Accept-Ranges: bytes
Content-Length: 3
Vary: Accept-Encoding
Connection: close
Content-Type: text/plain
666
Ich bräuchte aber nur die letzte Zeile, also die "666". Wie kann ich diese aus der kompletten Char isolieren?
Das ist eine HTTP-Abfrage. Du möchtest den Header (also die Kopfzeilen) entfernt haben. Ein HTTP-Header endet immer mit einer Leerzeile. Das Parsen ist somit sehr einfach: Du liest einfach ein, bis zweimal aufeinander CR/LF (ASCII 13/10) kommt, die restlichen Zeichen sind dann Deine Zahl. Wenn Du die als Integer haben willst, hilft Dir atoi() sicher weiter.
Ich muss doch nochmal weiterbohren: Ich habe ein Bisschen rumgesucht, wie ich die Leerzeile in der Textdatei finden kann... Da bin ich auf den Befehl client.find gestoßen.
Würdet ihr dass auch mit diesem Befehl machen, oder gibt es Alternativen? Und wie würde dann die Programmzeile heißen? "client.find("")"? Und ließt er dann automatisch nur alles danach ein?
Sorry, für die detaillierten Fragen, aber ich bin absoluter Arduino-Neuling!
amilo2010:
Ich muss doch nochmal weiterbohren: Ich habe ein Bisschen rumgesucht, wie ich die Leerzeile in der Textdatei finden kann... Da bin ich auf den Befehl client.find gestoßen.
Würdet ihr dass auch mit diesem Befehl machen, oder gibt es Alternativen? Und wie würde dann die Programmzeile heißen? "client.find("")"? Und ließt er dann automatisch nur alles danach ein?
Sorry, für die detaillierten Fragen, aber ich bin absoluter Arduino-Neuling!
Vielen Dank!
client.find("\"); \\ Syntax error
client.find ("\r\n\r\n") liefert leider nur true oder false zurück ...
Beim Arduino bist du nicht nur auf die "Arduino-Sprache" beschränkt, sondern kannst fast alles aus normaler c / c++ Programmierung verwenden. Texte sind dort in char arrays, und werden als char* - Parameter verwendet.
Das Problem ist eher, dass nicht klar ist, ob es sinnvoller ist, die Millionen Fundstellen von fertigem Code zu durchsuchen, oder sich die Grundlagen (wie?) selbst anzueignen. ( Die Mischung machts )
Das Problem "Finde eine Leerzeile im http - Header" hast du nicht allein, daher kann es erfolgversprechend sein, Ethernet- Beispiele zu durchsuchen.
Der "Von Grund auf" - Ansatz würde dich wohl zur Funktion strstr führen.
Aber die Funktionen sind auf cplusplus.com wesentlich besser erklärt
strstr() liefert dir einen Zeiger auf das gefundene Element. Wenn du danach +4 machst (da dein Such-String 4 Zeichen lang ist) solltest du danach einen Zeiger auf die gesuchte Zeile haben.