ich möchte gern ein String bis zu ein bestimmte Zeichen auslesen und den Rest löschen.
So sieht mein String aus: 00,0033;31,1192;0,00000;0,00600;66,00;00,00
und ich möchte gern nur 00,0033;31,1192;0,00000;0,00600 auslesen. Also ab der vierte Semikolon möchte ich den Rest meines Strings löschen.
Klasse String oder Char-Array?
Zeige doch einfach mal den Code. Wo kommt die Zeichenkette her?
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
void write_Measurement() {
Serial.println("WriteMeasurement:");
for (int i = 1; i <= 31; i++) {
if (Active_PowerSupply[i]) {
sprintf(buf_ISR_DateiName, "ADR %02d\r", i);
if (Serial1.print(buf_ISR_DateiName)) {
delay(200);
while (Serial1.available() > 0) {
cInput = Serial1.read();
Serial.print( cInput);
}
//Serial.print("receiving: ");
}
if (Serial1.print("DVC?\r")) {
int counter = 0;
delay(200);
while (Serial1.available() > 0) {
chbuf_ISR[counter] = Serial1.read();
counter++;
}
buf_ISR = chbuf_ISR;
now = rtc.now();
sprintf(buf_Uhr, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
hour = now.hour(); minute = now.minute(); second = now.second();
}
buf_ISR.replace(",", ";");
buf_ISR.replace(".", ",");
//buf_ISR = buf_ISR.substring(38,sizeof(buf_ISR));
Serial.print(buf_Uhr);
Serial.println(buf_ISR);
sprintf(buf_ISR_DateiName, "%02d_log.csv", i);
File myFile = SD.open(buf_ISR_DateiName, FILE_WRITE); //datei öffnen
myFile.print(buf_Uhr);
myFile.println(buf_ISR);
myFile.close();
}
}
}
Die werte. die ich bekomme, sind die Antwort meine Netzteile via die serielle Schnittstelle. Und diese Werte muss ich dann in einer CSVdatei meiner SD-Karte speicher. Aber ich möchte nicht alle werte speichern, sonder nus bis der vierte Semikolon
Einlesen musst Du sowieso alle Zeichen. Sendet Dein Netzteil ein Endezeichen, z.B. '\n' (Newline)?
Dann bis dahin einlesen und mit '\0' abschließen.
Dann kannst Du mit strtok das in seine Bestandteile aufteilen und weiter verarbeiten.
Beim einlesen muss zwar alle Zeichen lesen. Aber beim Speichern des eingelesenen String in der SD-Karte, möchte ich nicht alle Zeichen speichern. Ich möchte alle Zeichen bis der letzte Semikolon speichern.
zum Beispiel
if(buf_ISR=';') buf_ISR='0'
myFile.println(buf_ISR)
Das Link hat mir nicht geholfen. Die Netzteile schicken kein Zeichen am Ende. Ich kann auch kein substring verwenden, weil die werte, die jede Netzteile schicken, nicht alle gleich lang sind. Aber jeder Netzteil hat die gleiche Anzahl von Semikolon. Deshalb möchte ich bis der letzte semikolon speichern
Ich möchte mein String nicht zerlegen, sondern nur ein teil davon speichern
Verstehe ich nicht, wie du einen Teil erhalten willst ohne zerlegen.
Wenn die Teile zwischen den Semikolons unterschiedlich lang sind, musst du natürlich Semikolons suchen, zählen und entsprechend zerlegen. Das geht am einfachsten mit Zeichenketten, wie Tommy versucht, dir zu zeigen.
Wenn außer Semikolons keine anderen Trennzeichen vorkommen, hast du das Problem, den Anfang und das Ende einer Meldung zu erkennen: an der langen Zeit zwischen zwei Meldungen?
Das was du mit Code bezeichnest, ist übrigens unbrauchbar ohne Variablendefinitionen.
Dann will ich auch Mal raten:
Da die Meldungen im Terminal gelesen werden können, vermute ich Mal ganz stark, daß Da ein CR/LF gesendet wird - sonst würde auch das Terminal nicht in die nächste Zeile springen.
Alternativ den zeitlichen Abstand erfassen, zwischen zwei Semikolons (oder Semikola, Beides korrekt) wirst Du eine wesentlich längere Pause messen können, als zwischen 'den Anderen' - der Trenner ist gefunden.
Das mit dem CR/LF vermute ich auch, deshalb habe ich den TO ja angeregt, sich die Zeichen mal Hex ausgeben zu lassen.
Er zeigt sich bisher aber wenig kooperativ.