INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
String Zerlegen in drei Variablen
20.12.2015, 23:28 (Dieser Beitrag wurde zuletzt bearbeitet: 20.12.2015 23:50 von Wampo.)
Beitrag #1
Exclamation String Zerlegen in drei Variablen
So jetzt sind die Pro´s gefragt,

ich möchte gern einen STRING zerlegen und die zerlegten teile einzeln ausgeben.

mein String der z.b. 1,25,333 beinhaltet möchte ich nun auf drei Integer aufteilen

val 1 = 1;
val 2 = 25;
val 3 = 333;

dazu habe ich was gefunden was mir den String zwar in zwei teile Splittet aber ich kriegs nicht hin das ich ne dritte variable mit einfüg
Code:
#include <SD.h>
File file;

bool readLine(File &f, char* line, size_t maxLen) {
  for (size_t n = 0; n < maxLen; n++) {
    int c = f.read();
    if ( c < 0 && n == 0) return false;  // EOF
    if (c < 0 || c == '\n') {
      line[n] = 0;
      return true;
    }
    line[n] = c;
  }
  return false; // line too long
}

bool readVals(long* v1, long* v2) {
  char line[40], *ptr, *str;
  if (!readLine(file, line, sizeof(line))) {
    return false;  // EOF or too long
  }
  *v1 = strtol(line, &ptr, 10);
  if (ptr == line) return false;  // bad number if equal
  
  while (*ptr) {
    if (*ptr++ == ',') break;
  }
  *v2 = strtol(ptr, &str, 10);
  return str != ptr;  // true if number found
}

void setup(){
  int x, y;
  Serial.begin(9600);
  pinMode(53,OUTPUT);
  if (!SD.begin(4)) {
    Serial.println("begin error");
    return;
  }
  file = SD.open("SYS.TXT", FILE_READ);
  if (!file) {
    Serial.println("open error");
    return;
  }
  while (readVals(&x, &y)) {
    
    Serial.print("x: ");
    Serial.print(x);
    Serial.print("y: ");
    Serial.println(y);
    Serial.println();
  }
  Serial.println("Done");
}
void loop() {}

Wenn mir da einer helfen könnte wäre mir schon wieder geholfen, zumal ich nicht wirklich Ahnung von der pointerei hab.

BZW. was würdet ihr mir vorschlagen wie ich es am einfachsten zerlegen lässt??!!

Greez Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2015, 00:06
Beitrag #2
RE: String Zerlegen in drei Variablen
Hallo,
ich mache das in einem Sketch so:

Code:
char* Part0 = strtok(StringReceived, ":");  // Ersten Inhalt (Part0) vor ":" holen
int Part1 = atoi(strtok(NULL, ":"));            // zweiten Inhalt (Part1) vor ":" holen
int Part2 = atoi(strtok(NULL, ":"));            // dritten Inhalt (Part2) vor ":" holen

Dann sollte es bei dir so aussehen:

Code:
int Part0 = atoi(strtok(StringReceived, ","));  // Ersten Inhalt (Part0) vor "," holen
int Part1 = atoi(strtok(NULL, ","));               // zweiten Inhalt (Part1) vor "," holen
int Part2 = atoi(strtok(NULL, ","));               // dritten Inhalt (Part2) vor "," holen

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2015, 16:38
Beitrag #3
RE: String Zerlegen in drei Variablen
Danke für die schnelle Antwort allerdings funktioniert das bei irgendwie aus irgdnwelchen Gründen nicht.

Hättest du noch ne andere Idee Hotsys, evtl sogar mit dem vorhandenen code, da wäre eine art suche integriert und die brauche ich auch in meinem Programm.

Also ich durchsuche Zeile für Zeile bis ich auf eine Nummer stoße und dann sollen mir aus dieser Zeile die letzten beiden ausgegeben werden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2015, 16:55 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2015 16:56 von hotsystems.)
Beitrag #4
RE: String Zerlegen in drei Variablen
Du solltest das mit einem eigenen Sketch mal testen, dann wirst du sehen, das es funktioniert.
Bei mir arbeitet dieser Code schon einige Monate. Ich empfange einen String und teile den in 3 Integer, die ich anschließend weiter verarbeite.

Evtl. ist es ja kein String was da rauskommt, dann muss dieser vorher noch gewandelt werden.
Kommt denn eine Fehlermeldung?

In einen kopierten Slech, der auch noch schlecht dokumentiert ist, wird es schwierig.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.12.2015, 01:07 (Dieser Beitrag wurde zuletzt bearbeitet: 28.12.2015 01:16 von Wampo.)
Beitrag #5
RE: String Zerlegen in drei Variablen
Die Fehlermeldung ist diese hier
Blu_Ray_DB_V1:299: error: cannot convert 'String' to 'char*' for argument '1' to 'char* strtok(char*, const char*)'

int slot = atoi(strtok(currentLine, ",")); // Ersten Inhalt (Part0) vor "," holen

^

exit status 1
cannot convert 'String' to 'char*' for argument '1' to 'char* strtok(char*, const char*)'


und gehört zu dem abschnitt
Code:
while (myFile.available()){
    char eandata = myFile.read();
       Serial.print(eandata);                
        currentLine += eandata;
        // wenn neue zeile, alte zeile löschen
      if (eandata == '\n')
      {
        currentLine = "";
      }
    
    if(match == false){
      if(currentLine.endsWith(buffer)){                  
       Serial.print("\nMATCH"); Serial.print(" @ "); Serial.print(buffer);
       currentLine = "";
       //Serial.print("\nFach Nr:"); Serial.print(" "); Serial.print(fach);
       match = true;          // status wahr setzen bei treffer
      }
     }
    }
    if(currentLine.endsWith(",")){
    int slot = atoi(strtok(currentLine, ","));     // Ersten Inhalt (Part0) vor "," holen
    Serial.print("SLOT: ");
    Serial.println(slot);
    }

Wenn man sich das jetzt aber mal per Debug anschaut dann glaub ich versteht man unter anderem was ich machen will.

4010324037992,21,Ohne Limit
5050582607710
MATCH @ 5050582607710,22,Death Race
4010884250886,23,Captain America: The First Avenger
886973427491,24,Fear and Loathing in Las Vegas


Das Match @ xxxZahl bis zum komma ist per Serialprint geschrieben das komma ist dann schon wieder der String read teil wo er weiter von der SD karte liest, ich brauche jetzt die zahl die zwischen den zwei komma steht, praktisch die 22. MATCH @ 5050582607710,22,Death Race
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  String / HTTP Request Marc2014 2 73 08.12.2016 09:05
Letzter Beitrag: amithlon
  String zusammensetzen Mathias 13 555 01.09.2016 21:15
Letzter Beitrag: Mathias
  String-Array füllen? torsten_156 9 452 08.07.2016 20:07
Letzter Beitrag: amithlon
  String in EEPROM Speichern BennIY 2 417 27.06.2016 10:23
Letzter Beitrag: BennIY
  Variablen over/underflow "deaktivieren" Scheams 6 225 23.06.2016 16:36
Letzter Beitrag: Scheams
  String - Buchstabenposition auswerten scritch 5 667 01.04.2016 16:25
Letzter Beitrag: rkuehle
  String nach UTF16 konvertieren (UTF-16) ThoEngel 0 301 20.02.2016 19:22
Letzter Beitrag: ThoEngel
  Integer nach Ascii-String ? itoa arduinofan 2 595 22.12.2015 15:34
Letzter Beitrag: arduinofan
  Umwandlung von Array in String Wampo 2 533 09.12.2015 21:58
Letzter Beitrag: Wampo
  Plausibiltätsprüfung Variablen ??? MaHaI976 10 831 16.10.2015 17:39
Letzter Beitrag: MaHaI976

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste