ARDUINO Работа со строками

dselyaev

✩✩✩✩✩✩✩
6 Фев 2020
6
0
Привет! Я только начал вливаться в ваше сообщество.
Столкнулся с первой проблемой, происходит она от непонимания. Я плохо перерыл библиотеку, наверное, прошу ткнуть меня носом.
Сейчас я опишу что требуется.
Мне требуется получать с micro sd файл, выдергивать все содержимое файла, и все то, что достал разбить в 5 массивов(5 столбцов в csv), делитель ';'.
Я торможу на этом участке уже 3 дня. Файл я получаю, все хорошо, а дальше, ну ни как не получается. Так же было бы хорошо. Если бы допустим я мог просто обратиться 3 флэшке, к файлу, к нужной строке, их там 25, и вызвать все что в ней.
Подскажите как код реализовать.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,265
944
58
Марий-Эл
Читаешь побайтно до делителя или перевода строки, набивая буфер. Если встречаешь делитель, значит считал столбец. Плюсуешь счётчик столбцов.
Если считал перевод строки, значит строка закончилась, плюсуешь счётчик строк. Считал конец файла, значит чтение можно заканчивать.
На выходе имеешь массив в N столбцов на L строк.
 
  • Лойс +1
Реакции: dselyaev

dselyaev

✩✩✩✩✩✩✩
6 Фев 2020
6
0
@Эдуард Анисимов, возможно ли пример кода? Я пробую тут, но конструкция очень большая и громоздкая.
Записи вида: 1;100;200;20;-20\n
И таких 25 строк. Столбцов выходит 5, но думаю можно первый столбец сократить, просто узнавая индекс строки, что бы место сэкономить.
Делители тут получается ';', и обозначение конца строки '\n'. Я затупил на том, как это выдергивать, вот допустим я добежал до делителя конца строки.
Я знаю начальное положение курсора и конечное. Я могу выдергивать этот кусок, но он все равно ещё кусок, который тоже придется разобрать.
Ещё особенность, что запись может иметь как 12 символов, так и 22, в этом разбросе примерно.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,265
944
58
Марий-Эл
Здесь весь вопрос упрётся в оперативную память контроллера.
Если Вы просто читаете и обрабатываете прямо в контроллере то сможете обработать очень мало данных.
Если обрабатываете построчно и как то реагируете на это. Это другой вопрос.
Сходу никаких кодов не накидаю. Недостаточно информации. Неизвестен формат данных.

Записи вида: 1;100;200;20;-20\n
Эта запись строка или набор десятичных цифр?
Если строка, алгоритм один.
Если десятичные цифры разделённые точкой с запятой, это другой алгоритм. Разрядность цифр 8, 32 или 64 бита. Третий вариант.
Как видите, вопросов много.
Можно написать универсальный, но сожрёт много памяти.
 

dselyaev

✩✩✩✩✩✩✩
6 Фев 2020
6
0
@Эдуард Анисимов, опишу что имеется: на флэшке, в формате cvs, хранится записи, формата, который я привел.(точнее если Эксель открыть, это будет в каждой ячейке свое число) Их всегда будет 25 строк. Ни меньше ни больше.
Есть энкодер на 25 позиций, он уже настроен и программа сделана и обкатана, работает через аналоговый порт как делитель. На каждую позицию из 25, (начиная с 1), хранятся как раз таки на флэшке данные.
Так же имеются дисплеи 7-сегментные, 4-х разрядные, которые и будут выводить данные из строки. Их я тоже уже настроил и числа выводят каждый свое. Дисплеев 5 штук.
Опишу процесс. Замкнулся ключ энкодера,, допустим 3 позиция. Контроллер запустил условие
Максимальное число на двух дисплеях 999,9[4 разряда] минуса быть не может, один знак после точки, далее другие два дисплея отображают числа от - 90 до 90, без точки. И ещё один дислпей показывает номер позиции, думаю что на этом столбце можно сэкономить и брать значение индекса 1 столбца у строк.
То есть по данным в csv:
Имеется 5 столбцов.
Минимальные и максимальные значения которых:
Пишу по столбцам, через делитель ';'
1-25 ; 0,0—999,9 ; 0,0 — 999,9 ; -90—90 ; -90—90.
Постарался описать все.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,265
944
58
Марий-Эл
1-25 ; 0,0—999,9 ; 0,0 — 999,9 ; -90—90 ; -90—90.
Теперь более понятно.
По крайней мере две ячейки содержат числа с плавающей запятой.
Примерно понимаю, что нужно.
Если на выходных будет время, накидаю алгоритм.
 
  • Лойс +1
Реакции: dselyaev

dselyaev

✩✩✩✩✩✩✩
6 Фев 2020
6
0
Хорошо, спасибо.
Я сегодня вручную прорисовывал этот алгоритм, щас пробую все перенести уже в код.
Будьте любезны, посоветуйте книги по подобным алгоритмам, так как считаю у себя это большим пробелом. Хотел бы восполнить.

Я сделал это, сидя и кропотливо выискивая комбинации. Зато теперь я понял принцип этого👍
Код примерно того как вышло, кину как домой доберусь, пока с телефона не удобно.
Так же нашел библиотеку которая по срезам тоже чуть-чуть помогла.
@Эдуард Анисимов, Вам написал вопрос в личные сообщения, он все равно ещё актуален.