Чтение csv файла с sd карты

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем vvr, 19 дек 2015.

  1. vvr

    vvr Инженерище

    после долгих гуглений наконец разобрался как записывать csv файл по дате на sd карту
    так подготавливаю файл
    Код (C++):
    year = String(now.year()%2000, DEC);
    if(now.month() < 10)
    month = "0" + String(now.month(), DEC);
    else
    month = String(now.month(), DEC);
    if(now.day() < 10)
    day = "0" + String(now.day(), DEC);
    else
      day = String(now.day(), DEC);
    if(now.hour() < 10)
    hour = "0" + String(now.hour(), DEC);
    else
      hour = String(now.hour(), DEC);
    if(now.minute() < 10)
    minute = "0" + String(now.minute(), DEC);
    else
      minute = String(now.minute(), DEC);

    date = day + "." + month + "." + year;
    time = hour + ":" + minute;

    String stroke = day + month + year + ".csv";
    char charVar[12];
    stroke.toCharArray(charVar, 12);
    char new_data[12];
    strcpy(new_data,charVar);
    szNewFileName = new_data;

     
    так записываю
    Код (C++):
    myFile = SD.open(szNewFileName, FILE_WRITE);
    if (myFile) {
      myFile.print(date);
      myFile.print(F(","));
      myFile.print(time);
      myFile.print(F(","));
      myFile.print(day_game);
      myFile.print(F(","));
      myFile.print(val1);
      myFile.print(F(","));
      myFile.println(val2);
      myFile.close();
    }
    так читаю
    Код (C++):
    myFile = SD.open(szNewFileName, FILE_READ);
    if (myFile)
    {
      while (myFile.available())
      {
        Day = myFile.read();
        Month = myFile.read();
        Year = myFile.read();
        Hour = myFile.read();
        Minute = myFile.read();
        val1 = myFile.read();
        val2 = myFile.read();
      }
      myFile.close();
    }
    в файле записано
    19 12 15 20 33 2 4
    в сериале
    44 48 13 10 -1 -1 -1
    в чём косяки у меня ?
     
    ИгорьК нравится это.
  2. geher

    geher Гуру

    Во-первых, myFile.read(); читает один символ из файла.
    Чтобы прочитать целое число до разделителя, следует использовать myFile.parseInt();
    Во-вторых, получается, что из файла читается 4 символа (запятая, ноль, возврат каретки, перевод строки), после чего достигается конец файла и еще три считывания возвращают -1.
    Вопросы.
    Точно ли читается тот самый файл, в котором 19 12 15 20 33 2 4?
    Точно ли в нем 19 12 15 20 33 2 4?
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    А почему не так?
    Код (C++):
    year = String(now.year()%2000, DEC);
    month = now.month() < 10 ? "0" : "" + String(now.month(), DEC);
    day = now.day() < 10 ? "0" : "" + String(now.day(), DEC);
    hour = now.hour() < 10 ? "0" : "" + String(now.hour(), DEC);
    minute = now.minute() < 10 ? : "0" + String(now.minute(), DEC);
    date = day + "." + month + "." + year;
    time = hour + ":" + minute;[/code
     
  4. vvr

    vvr Инженерище

    дык пока не до оптимизации
    csv читать не получается:(
     
  5. vvr

    vvr Инженерище

    myFile.parseInt() - выводятся все нули
     
  6. vvr

    vvr Инженерище

    в файл записана строка
    читаем строку
    парсим в инт - в правильном направлении:)