Редактирование файла на microSD

Что то не совсем понятно зачем вообще эти мусорные символы (CR LF и т.д.) писать на флешку. Если у вас длинна данных константа, и вы всегда можете в цикле найти адрес начала данных. Откройте нам секрет полного тз на разработку. Может у вас к флешке ещё идет обращения сторонними девайсами и вы стараетесь подстроиться под них? Ну типа DMA технологий

rror: ‘class String’ has no member named ‘at’
char v = line.substring(line.length() - 1).at(0);

практически уверен что нет. Формат файла “поле = значение” о длине строк не заботится, наверняка все строки разные

я уже поправился, используйте charAt()

читайте выше, - проблема слияния строк

нет никаких секретов и DMA технологий

Правильнее было бы использовать бинарный файл вообще без строк

char v = line.substring(line.length() - 1).charAt(0);
Serial.print("вот что за символ "); Serial.println(v, HEX);

вот что за символ D :roll_eyes:

пока еще набросок, буду приводить в более читабельный вид

hex 0x0D =13 десятичное, он же CR

понял, можно вообще использовать символ в HEX формате, или согласно таблицы ASCII подставить?

можно
char(13) или char(0x0d) - это одно и то же
Оно же ‘\r’

спасибо, буду пробовать.

Ну если вы ограничены в своей задаче размером флеш накопителя (к примеру флешка должна быть 512 байт и больше ни ни) тогда все ваши замороки наверно оправданы. Но если вы не ограничены размером флеша (ну можно поставить 1 Тb к примеру или больше) и зная максимальную длину мгновенных данных, которых надо сохранить здесь и сейчас, то возьмите тупо двойной размер количества байт (на будущее) И такими блоками пишите/читайте ваши данные. И уверяю вас, ни когда проблемы слияния строк у вас не будет. И вообще понятия строк пропадёт, потому что флешка - это одна очень длинная строка. ))))

1 лайк

проблема слияния строк после изменения значения ключа не решена

[SECRET]
#сетевые параметры
SSID=TTK-191 PASS=2940078511

а должно быть

[SECRET]
#сетевые параметры
SSID=TTK-191 
PASS=2940078511

изменяется значение ключа SSID

line = String(key_name) + "=" + String(new_value) + char(10);

почему 10, когда тремя сообщениями ранее вы выяснили, что это 13 ?

Вообще Ваша задача предельно проста. Прочитайте какую-нибудь запись из файла начиная с первой буквы ключа до первой буквы следующего ключа включительно. Выведите все символы на печать в хекс формате. Так вы увидите ПРАВИЛЬНЫЙ формат своей записи.
Остается всего лишь его повторить.

При перезаписи замените только значение, последние символы строки не трогайте.
Запишите все обратно

ЗЫ фигней какой-то страдаете, ей богу :slight_smile:

1 лайк

13 стоит после ’ ]’

line = String(key_name) + "=" + String(new_value);

не работает, может из за того что длина строки увеличилась

[SECRET]
#сетевые параметры
SSID=TTK-191 PASS=2940078511

Что “не работает” -то? Вы заново пишете в строчку и ключ, и знак равно… ЗАЧЕМ?
Прочитайте еще раз ВНИМАТЕЛЬНО, как я Вам написал сделать.

“может быть” ? :slight_smile:
Это уже просто ЛОЛ

Что я вам писал

как то же не логично, теряется весь смысл редактирования значения ключа. Он может быть длиннее, или же короче