Парсинг значений с SD карты

xexe09
Offline
Зарегистрирован: 13.12.2017

Ох сколько же раз эту тему обсасали на данном форуме, но к сожалению ответов четких и конечных, нигде нету. Проблема заключается в следующем: Храню на SD карте значение массивов RAW от ИК ДУ. С записью проблем никаких не имею, в temp.txt храниться следующие:

99, 3200, 1950, 400, 1150, 400, 1150, 400, 450, 400, 500, 400, 450, 400, 450, 400, 1150, 450, 450, 400, 1200, 400, 1150, 400, 450, 400, 500, 400, 1150, 400, 450, 450, 1100, 450, 500, 400, 1150, 400, 450, 400, 450, 400, 500, 400, 450, 400, 450, 400, 450, 400, 500, 400, 450, 400, 450, 400, 1150, 400, 500, 400, 450, 400, 450, 400, 450, 400, 500, 400, 450, 400, 450, 400, 450, 400, 500, 400, 450, 400, 1150, 400, 450, 400, 500, 400, 450, 400, 1200, 350, 1200, 400, 500, 400, 450, 400, 450, 400, 450, 400, 400, 350, 8888

Теперь стоит следующая задача: распарсить таким образом, чтобы каждое значение было записано в определенное значение массива

array IR_MASS[]  
->IR_MASS[0]=99;
->IR_MASS[1]=3200; итд...

к сожалению, даже с этим я справиться не смог, по причине мало демок + недоконца везде инфа.

Если данный вопрос решиться - задам смежный, как можно реализовать, чтобы помимо парсинга элементов работал парсинг строк, чтобы при окончании строки шла запись в новый массив?

PS нашел вот такой лайфхак - https://github.com/s-light/test__SDCard_ParseFile но там очень много кода + почему то выводиться только первых 6 элементов массива?

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

По той ссылке вас интересует только строки 458 - 668 и то там большая часть для вас не нужна будет. Открыли файл, читаем по строкам и сразу парсим по запятой. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Идея хранить числовые коды от IR в виде строк в текстовом файле - дурная чуть более, чем полностью. Что мешает хранить это в бинарном виде?

void writeToFile(int* array, int sizeOfArray)
{
	File f = SD.open(F("code.bin"),FILE_WRITE | O_TRUNC);
	if(f)
	{
		
		f.write(&sizeOfArray,sizeof(int));
		for(int i=0;i<sizeOfArray;i++)
		{
			int toWrite = array[i];
			f.write(&toWrite,sizeof(int));
		}
		f.close();
	}
}

int* readFromFile()
{
	int* result = NULL;
	File f = SD.open(F("code.bin"),FILE_READ);
	if(f)
	{
		int len;
		f.read(&len,sizeof(int));
		result = new int[len];
		
		for(int i=0;i<len;i++)
		{
			int data;
			f.read(&data,sizeof(int));
			result[i] = data;
		}
		
		f.close();
	}
	
	return result;
}

Примерно так, навскидку. И не надо дрюкаться с парсингом строк - зачем оно в текущей задаче-то - занять МК нечем?

Приведённый код - только пример, там в файл сначала пишется кол-во элементов массива, потом - элементы массива, по 2 байта на элемент. Можно переписать без заголовка, будет чуть больше кода при чтении. Анализа ошибок чтения - нет, тупо лень.