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 nach Byte Array in ASCII-Codierung nexus1212 7 389 05.11.2017 14:36
Letzter Beitrag: Tommy56
  Libs mit peristenten Variablen Gerri3d 2 213 04.11.2017 07:20
Letzter Beitrag: Gerri3d
  Frage zur Adressierung von Variablen ardu_arne 14 574 28.10.2017 11:16
Letzter Beitrag: ardu_arne
  String vergleichen georg01 15 1.005 18.07.2017 20:35
Letzter Beitrag: Tommy56
  String.charAt() ardun 3 406 02.07.2017 15:28
Letzter Beitrag: Tommy56
  Drei Achsen Lagesensor Franz54 27 1.703 16.06.2017 21:19
Letzter Beitrag: Franz54
  Aus char string machen metzgefa 1 467 06.05.2017 15:15
Letzter Beitrag: Tommy56
  String übergeben oOSpikeOo 9 858 28.03.2017 19:47
Letzter Beitrag: georg01
  String in tinygps++ einlesen hoko 17 1.314 07.03.2017 15:40
Letzter Beitrag: hoko
  String -> Char *gelöst* Binatone 2 601 31.01.2017 11:08
Letzter Beitrag: Binatone

Gehe zu:


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