|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как прочитать все данные с ini файла
Всем привет.
Вопрос такой, у меня сохраняются данные о температуре в ini файле. Сохраняются по дате и времени, причём с разным интервалом. Мне необходимо прочитать данные за прошедшие сутки и построить график. Вопрос как это сделать? Я разобрался как прочитать одну запись, и то необходимо знать дату и точное время, до секунды, а как прочитать все данные за сутки? При чём в ini файле хранятся данные за несколько суток. Можно было бы прочитать и за все сутки, но тогда необходимо будет как то двигать график на экране, что бы найти нужный кусок графика. |
#2
|
|||
|
|||
Для полноценного ответа хотелось бы видеть пример содержимого ini-файла. В обзем виде - читать все, потом в памяти отфильтровать.
Если есть возможность переделать код сохранения, то можно сохранять данные по секциям. Т.е. каждая дата (именно дата) будет храниться в отдельной секции. Тогда можно будет просто читать секцию и уже дальше работать с этими данными. Пример организации ini-файла в таком варианте: Код:
[data-2022-06-07] 10_01_01=5 10_01_08=7 10_05_10=8 [data-2022-06-08] 10_01_11=8 10_02_08=5 10_15_10=2 |
#3
|
|||
|
|||
У меня вроде так и сохраняется, в таком виде.
[05.05.2022] 15:35:14=23 15:40:16=23 15:41:16=23 15:42:16=23 15:43:16=23 15:44:16=23 15:45:16=23 15:46:16=23 15:47:16=23 15:48:16=23 15:49:16=24 15:50:16=24 15:51:16=24 15:52:16=24 15:53:16=24 И как прочитать всю секцию? Последний раз редактировалось vodovoz, 14.06.2022 в 10:22. |
#4
|
|||
|
|||
У TIniFile есть метод - ReadSection - читает всю секцию в TStrings:
Код:
var sl : TStringList; ini : TIniFile; i : Integer; begin ini := TIniFile.Create('...'); sl := TStringList.Create; ini.ReadSection('05.05.2022',sl); For I := 0 To sl.Count-1 Do begin ... end; ini.free; sl.free; end; |
#5
|
|||
|
|||
Я смог, только прочитать количество записей, вывел в Label и время измерения температуры, вывел в ListBox. А как вывести данные о температуре, соответствующие этому времени, и присвоить их графику в Chart ?
|
#6
|
|||
|
|||
|
#7
|
|||
|
|||
Не могу понять, почему считывается только время записи, а как прочитать данные, которые относятся к этому времени?
|
#8
|
|||
|
|||
ReadSection читает тебе именно имена ключей. Если хочешь сразу читать и имена и данные, то используй ReadSectionValues
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
vodovoz (30.06.2022)
|
#9
|
|||
|
|||
lmikle, а при таком считывании, потом, возможно будет разделить дату и данные, что бы использовать при построении графика?
|
#10
|
|||
|
|||
Да, секция читается в формате Key=Value.
Т.е. надо обращаться к считанным данным через соотв. св-во TStringList. Если правильно помню, то через sl.Values[KeyName] Как то так: Код:
var sl : TStringList; ini : TIniFile; i : Integer; begin ini := TIniFile.Create('...'); sl := TStringList.Create; ini.ReadSectionValues('05.05.2022',sl); For I := 0 To sl.Count-1 Do begin ShowMessage(Format('Имя ключа = %s, значение ключа = %s',[sl.KeyNames[i],sl.Values[sl.KeyNames[i]]])); end; ini.free; sl.free; end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Gareth (02.07.2022)
|