Показано с 1 по 7 из 7

Тема: Уничтожение переменной

  1. #1

    По умолчанию Уничтожение переменной

    Здравствуйте!

    Не сумел найти ответ в поиске, поэтому пришлось создавать отдельную тему.
    Ситуация, в общем-то, стандартная: чтение параметров из файла. Сделал так: читаю файл построчно, очищая от пустых строк, комментариев и прочего, и на выходе получаю массив строк. С ним уже работаю дальше. Но поскольку параметров неизвестное количество (но немало, несколько сотен), а динамически изменять размер массива нельзя (или я не знаю как), то приходится делать ARRAY [1..999] OF STRING. После чтения файла и присвоения значений всем параметрам в программе этот массив уже не нужен, только память зря занимает. Как его правильно уничтожить?

    Или, может, я не с того конца подошёл, и массив тут вообще ни к чему? Или пусть висит, ничего страшного?

  2. #2

    По умолчанию

    1. Пусть висит, есть не просит.
    2. Почему нельзя считать 1 строку, разобрать, переложить считанные параметры в нужные места, считать в эту же строковую переменную и др. ? Без массива строк.

  3. #3

    По умолчанию

    Пусть висит так пусть висит, спасибо)

    Можно конечно и сразу разбирать. Но хотел сделать «красиво»: один блок читает файл, другой разбирает, что получилось. Потому как файлов конфигурации будет как минимум два с разными форматами, да и форматы эти пока нетвёрдо определёны.

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,047

    По умолчанию

    • Велосипед: SysLibMem — динамическое выделение памяти.
    • Не велосипед: реализация списков в библиотеке OSCAT.

    А почему формат текстовый? Может, лучше перед заливкой в ПЛК переводить в бинарный? Я вот в своём проекте вообще сделал без всякого разбора чтение напрямую из файла:
    Код:
    TYPE CONFIG : (* Формат файла соответствует формату этой структуры *)
    STRUCT
    	header: DWORD;
    	(* тут поля структуры *)
    	checksum: DWORD;
    END_STRUCT
    END_TYPE
    
    FUNCTION ReadConfig : CONFIG
    VAR_INPUT
    	filename: STRING;
    END_VAR
    VAR
    	handle: DWORD;
    	cfg: CONFIG;
    END_VAR
    
    (* Читаем весь файл в структуру за раз *)
    SysMemSet(ADR(cfg), 0, SIZEOF(cfg));
    handle := SysFileOpen(filename, 'r');
    IF handle > 0 THEN
    	SysFileRead(handle, ADR(cfg), MIN(SysFileGetSize(filename), SIZEOF(cfg)));
    	SysFileClose(handle);
    END_IF
    (* Ну а дальше проверка на целостность по контрольной сумме с загрузкой
    настроек по умолчанию при несоответствии и прочие предосторожности *)
    Последний раз редактировалось Yegor; 13.01.2012 в 16:27.

  5. #5

    По умолчанию

    Текстовый формат потому, что файлы конфигурации формируются сторонними программами, которые, скорее всего, будет писать кто-то совсем другой=) А договориться о текстовом формате и отследить в нём ошибки гораздо проще, чем в бинарном. Да и мне, прямо скажем, чем нагляднее — тем лучше. Квалификация пока низковата)

    SysLibMem посмотрю, и в Oscat пороюсь, спасибо. Или, может, сразу дадите наводку, что именно в Oscat искать?

  6. #6
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,047

    По умолчанию

    В библиотеке OSCAT и искать-то особо нечего. Там сразу на виду семейство функций для работы со списками. Категория так и называется — List processing. Привёл бы примеры использования, но работать со списками в кодесисе не доводилось. Не разберётесь — обращайтесь, подумаем вместе.

    На мой взгляд, текст это слишком податливый интерфейс для ответственных систем. Визуально отловить ошибку, конечно, проще, но и ассортимент ошибок куда шире, нежели в бинарниках.

  7. #7

    По умолчанию

    Нашёл, увидел, спасибо. Буду пробовать.

Похожие темы

  1. Использование переменной TIME
    от Валера Храмцов в разделе ПЛК1хх
    Ответов: 20
    Последнее сообщение: 26.08.2021, 09:48
  2. Чтение переменной с ТРМ101 по Modbus...
    от servo в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 22.08.2011, 10:10
  3. Ответов: 2
    Последнее сообщение: 02.08.2011, 08:18
  4. самозапуск переменной
    от smokin в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 17.12.2009, 15:35

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •