Чтение части файла с sd карты
- Войдите на сайт для отправки комментариев
Вс, 07/02/2016 - 13:42
На sd карту записан файл
11111
22222
33333
нужно прочитать часть файла, например 22222
при использовании функции seek() читается всё что после указателя до конца файла.
например
myFile.seek(5);
читает
22222
33333
а нужно получить только 22222
есть какая то возможность указать диапазон чтения ?
Блин, ну не знаю уже сколько можно повторять в каждой теме одно и тоже:
КОД СЕКРЕТНЫЙ????
КАКОГО ... ВЫ ЗАДАЁТЕ ВОПРОСЫ ПО КОДУ, КОТОРЫЙ НЕ ПОКАЗЫВАЕТЕ????
Откуда же знать как именно Вы читаете? На Ваш вопрос в том виде, в каком Вы его задали, ответ получается только такой: "ну, блин, читай сколько надо, в чём проблема-то"?
А чтобы понять в чём Ваша прооблема, неплохо бы глянуть на код.
да какой там секретный
просто в данном случае (в моей ситуации ) код не причём.
я не нашёл в библиотеке как ограничить количество читаемых байт
Вы так в этом уверены? Ну, если Вы уже сами знаете что при чём, а что ни при чём, зачем вопросы задавать?
Знаете. я ни разу не видел водопада Виктория, но это не значит, что его не существует.
Теперь по сути дела. Вариантов, как всегда, 100500.
Вариант 1 (если Вы знаете сколько именно байтов Вам надо читать)
1.1. можно воспользоваться функцией
int read(void *buf, uint16_t nbyte);
Читает в предложенный буфер указанное количество байтов или меньше (если файл раньше кончится). Возвращает количество прочитанных байтов. Первый параметр - буфер, второй - количество байтов, которые надо читать. Точно также пишете
char szBuffer[32];
myFile.read(szBuffer, 5);
читается 5 байтов, не помню только в эти пять входит ограничительная точка или нет (поэкспериментируйте).
1.2. Можно не пользоваться той функцией, а вместо
while
(myFile.available())
, написать что-нибудь более вразумительное, типа:int n = 0;
for
(; myFile.available() && n < 10;
Serial
.write(myFile.read()), n++);
Будет читать 10 байтов или меньше, если файл раньше закончится. После работы в переменной n находится количество реально прочитанных байтов.
Вариант 2 (если Вы не знаете сколько именно байтов Вам надо читать, а хотите читать пока не встретите какой-то признак по которому следует прекратить чтение)
Просто читаете как у Вас по ходу проверяя, что именно прочитали. Как встретился ограничивающий символ - прекращаете читать.
спасибо
попробую
о результатах отпишусь
сделал на варианте 1.2
ЕвгенийП - спасибо!
Не за что
здравствуйте.
помогите разобраться. Прочитал описание функций работы с SD картой и не могу понять почему так происходит.
Да, читаю часть данных с карты но выводится в монитор порта какая-то ерунда.
Так вот
выводит в монитор порта следующее:
4294967295 - это "-1".
судя по всему, команда seek() возвращает ошибку, ну и дальше ничего на самом деле не работает.
Посмотрите внимательно - у вас в коде переменная myFile нигде не инициализируется. откуда контроллер должен понять, что myFile - это именно config.txt ?
1. Если не понимаете, почему кубики, для начала выведите эти байты не как символы, а как числа. Думаю, что числа окажутся 255 из-за попытки чтения за пределами конца файла.
2. Вы нигде не проверяете, открылся ли файл, успешно ли завершилась попытка позиционирования... Отслеживайте ошибки и будете знать, что происходит в программе.
Спасибо.
Не предал этому значения.
Поменял
SD.open("CONFIG.TXT", FILE_READ);
на
myFile = SD.open("CONFIG.TXT", FILE_READ);
и всё заработало.