достаточно того, что функция записи возвращает результат отсутствие ошибок и если будет стоять любая ЖФС. Дополнительно в качестве повышения надежности желательно размонтировать флешку перед её изъятием
Вид для печати
достаточно того, что функция записи возвращает результат отсутствие ошибок и если будет стоять любая ЖФС. Дополнительно в качестве повышения надежности желательно размонтировать флешку перед её изъятием
В проекте для чтения в файл использую библиотеку CAA_File. Основываюсь на примерах встроенной справки CoDeSys 3.5 и примере Мурата http://www.owen.ru/forum/showthread....l=1#post138038, именно эта тема мне во многом помогла.
Выкладываю часть своего проекта - оставил только то, что относится к чтению файла архива данных (добавил только в визуализацию таблицу данных, т.к. массив данных храню только в памяти). Может кому поможет в освоении CoDeSys 3 и библиотеки CAA_File.
Краткое описание:
Чтение массива (1000 строк) структуры (6 столбцов) из файла D:/articles_arhiv.csv. (Для устройства Control Win V3)
Структура: (archive_param)
1-й элемент (article) - тип STRING(17);
2-й элемент (inv_number) - тип UINT(0..9999);
3-й элемент (t1) - тип TIME;
4-й элемент (t1) - тип TIME;
5-й элемент (t1) - тип TIME;
6-й элемент (skip) - тип USINT;
Величина архива (количество строк) задаётся глобальной переменной ia_max.
Величину массива байт необходимо задать переменной ib_max ориентируясь на максимальное количество символов во всех элементах структуры.
Путь считывания файла (чтение с USB, SD-карты или диска D) можно выбрать в объявлении переменной filename_arhchive, закомментировав соответствующие строки.
Функцию преобразования из кодов ASCII в символы составил сам по своим нуждам, при желании можно дополнить или изменить.
После чтения файла выдается информация:
1. Ошибка чтения (при отсутствии файла).
2. Пустой файл (чтение не происходит).
3. Успешное чтение файла.
Проект содержит комментарии и может быть переписан для чтения любого файла с данными.
Буду признателен, если есть замечания или предложения оптимизации проекта.
Здравствуйте!
Объясните мне, пожалуйста, что значит:"Затем анализируете массив, ищите начало и конец нужной строки."
У меня есть файл размер которого будет постоянно увеличиваться. Мне необходимо в итоговую таблицу выводить данные, которые требуется найти по двум параметрам: дата и название.
примеры просмотрены не один раз. Но никак не могу придумать как их использовать применимо к моей ситуации.
1. Для измерения размера файла можно воспользоваться FILE.GetSize. Получаете количество байт в файле (file_size).
2. Считываете в массив байт. Получаете aDataArea: ARREY [0..bmax] of BYTE, где bmax = file_size-1.
3. Перебирая в aDataArea[0..bmax] индекс b от 0 до bmax, можно анализировать массив байт. Код 59 соответствует двоеточию, код 13 - концу строки (далее за ним 10 - перенос строки).
Можно, конечно, далее воспользоваться FILE.SetPoz и далее FILE.Read(чтение строки). Но это опять каждый раз доступ к внешней SD или USB-flash, при большом объёме информации займет много времени (проверено).
Я делаю так: анализируя aDataArea[0..bmax] как указано выше, преобразую данные в массив структур aArchive: ARREY[1..imax] OF struct_archive, сохраняемом в оперативной памяти. Скорость выборки будет намного выше и отсутствует работа с внешним накопителем.
Далее по столбцам, например aArchive[i].data и aArchive[i].nazvanie, ищем нужную строку i. И выводим из строки i найденные данные.
Спасибо.Попробую воспользоваться вашим примером.
vniko, во-первых,спасибо Вам большое за пример. Очень упростил мне работу.
Правда, обнаружились некоторые но...
Размер файла,который создается заранее неизвестен,соответственно прописываю ia_max := 40000 - максимально возможное значение.Но при чтении файла в массив данных,ФБ FILE.Read выдает и .xDone = true и .xError=true, .eError = 1.
Описание этой ошибки нет. Но при этом данные считываются.
Понятно,что можно легко обойти её, но все же хотелось знать, что означает данная ошибка.
не пробовали возложить работу по поиску строки в непонятно_каком_изначально_размере_файла на линукс, всякие cat grep и > делают чудеса, а вместо тяжеловесой бибки CAA File использовать sysexecute
Признаюсь даже и мысли не было.Спасибо, буду пробовать.
Может вы мне сможете подсказать.
Нужно, чтобы данные в файл записывались в течении 3 месяцев, по истечению срока, данные перезаписывались в тот же файл, не затирая предыдущие записи выше.
Пример, были данные: 1,2,3,4,5.Прошло 3 месяца, началась перезапись 6,7,3,4,5->cледующий день 6,7,8,4,5
Данные записываются с помощью CAA File.
а почему не подходит удаление самой древней строки а новую как обычно в конец файла