// Simula il contenuto del file (n.b. lo spazio non comporta alcun problema)
char testData[] = { 
"1,2,3,999\n"
" 2, 10, 3, 156\n"
"3, 7, 53,896\n"
};

// Array che andrà a contenere i valori interi ricavati riga per riga
#define ARRAY_SIZE 4
int intValues[ARRAY_SIZE];

// Funzione che passata una string di valori separati da una virgola, 
// coverte il testo in interi e salva i valori nell'array
void tokenizer(const char* str) {
  int cnt = 0;
  char * pch;
  pch = strtok (str, ",");
	while (pch != NULL)	{
		uint16_t val = atoi(pch);
    if (cnt < ARRAY_SIZE)
      intValues[cnt++] = val;
		pch = strtok (NULL, ",");
	}
}


void setup() {
  Serial.begin(9600);
  Serial.println("START");

  char buffer[20];
  int pos = 0;

  // Scorriamo tutti i caratteri del teso di prova, fino a trovare il ritorno a capo
  // che indica la fine di una riga e quindi passiamo la c-string alla funzione tokenizer
  // Con un file sarebbe più o meno la stessa cosa, ma basta fare tipo:
  // while(file.available()) {
  //   char ch = file.read();
  //   if (ch != '\n')
  //   etc etc

  for (int i=0; i<strlen(testData); i++) {

    if(testData[i] != '\n') {
      buffer[pos++] = testData[i];
    }
    // Fine riga raggiunto
    else {
      buffer[pos] = '\0';       // Carattere di terminazione stringa
      pos = 0;                  // Pronto per la prossima riga
      Serial.println (buffer);

      // Conversione riga-n da testo ad interi
      tokenizer(buffer);

      // Stampa dell'array giusto per vedere se tutto è andato come previsto
      
      for(int i=0; i<ARRAY_SIZE; i++) {
        Serial.print("Indice: ");
        Serial.print(i);
        Serial.print("; Valore: ");
        Serial.println(intValues[i]);
      }
    }
  
  }

}

void loop() {
  // put your main code here, to run repeatedly:

}