fat16lib:
Here is a simple sketch that reads a CSV file with two numbers on each line. It doesn't use the dangerous String class.#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(){
long x, y;
Serial.begin(9600);
if (!SD.begin(SS)) {
Serial.println("begin error");
return;
}
file = SD.open("TEST.CSV", FILE_READ);
if (!file) {
Serial.println("open error");
return;
}
while (readVals(&x, &y)) {
Serial.print("x: ");
Serial.println(x);
Serial.print("y: ");
Serial.println(y);
Serial.println();
}
Serial.println("Done");
}
void loop() {}
Reading this "TEST.CSV" file. Results in this output
fat16lib:
Here is a simple sketch that reads a CSV file with two numbers on each line. It doesn't use the dangerous String class.#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(){
long x, y;
Serial.begin(9600);
if (!SD.begin(SS)) {
Serial.println("begin error");
return;
}
file = SD.open("TEST.CSV", FILE_READ);
if (!file) {
Serial.println("open error");
return;
}
while (readVals(&x, &y)) {
Serial.print("x: ");
Serial.println(x);
Serial.print("y: ");
Serial.println(y);
Serial.println();
}
Serial.println("Done");
}
void loop() {}
Reading this "TEST.CSV" file. Results in this output
@fat16lib, I am having a little difficulty in following your code; however with some time/google I think I will figure it out. If you have a minute, could you look at my post and see if this code you posted would be applicable to my situation? I have an SD card with the fixed-length HEX and then the username, can I use your code for this case?
https://forum.arduino.cc/index.php?topic=622216.0
ba322d387d980d74fc5d0d46, John
ba039b572f612e58d05a8c2d, Katie
979aeeb3ee35360a24d6190, Sandra
78cabc678dc0a503647cb05d, Tim