Форум » » Чтение инфы из текстового файла » Ответить

Чтение инфы из текстового файла

RuckShot1: Добрый день, Поделитесь, пожалуйста, ссылкой или примером работы с текстовым файлом (чтение/запись) на контролере. Спасибо!

Ответов - 9

marin_n: В хелпе у SIMPL+ вроде есть пример работы: File Functions Overview STRING sBuf[1000]; SIGNED_INTEGER nFileHandle; CHANGE input { SIGNED_INTEGER nNumRead; StartFileOperations(); nFileHandle = FileOpen ( "\\CF0\\MyFile", _O_RDONLY ); if ( nFileHandle >= 0 ) { nNumRead=FileRead( nFileHandle, sBuf, 500); Print ("Read Error\n"); FileClose( nFileHandle ); } EndFileOperations(); } /******************************************************************************************* Main() Uncomment and place one-time startup code here (This code will get called when the system starts up) *******************************************************************************************/ Function Main() { SIGNED_INTEGER nNumWritten; StartFileOperations(); nFileHandle = FileOpen ( "\\CF0\\MyFile", _O_WRONLY ); if ( nFileHandle >= 0 ) { sBuf = "Hello World!"; nNumWritten=FileWrite( nFileHandle, sBuf, 500 ); if(nNumWritten<0) Print ("WriteError"); FileClose( nFileHandle ); } EndFileOperations(); } \\СF0\\ - это Compact Flash \\NVRAM\\ - это память контроллера

Игорь K.: Интересная тема, полезная. Программа выше - пишет один раз и потом затирает данные новой записью. Общие подходы есть в help для S+. А так делаю я: Digital_Input Write; Analog_input Temp; SIGNED_INTEGER nFileHandle; STRING sBuf[7]; Change Write { StartFileOperations(); sBuf = ITOA(Temp)+"\n"; nFileHandle = FileOpenShared ( "\\CF0\\hvac.txt", _O_WRONLY | _O_APPEND); IF (nFileHandle >= 0) { if( FileWrite(nFileHandle, sBuf, 7) > 0 ) PRINT ( "Wrto: %s\n", sBuf ); IF ( FileClose ( nFileHandle ) <> 0 ) PRINT ( "Err\n" ); } EndFileOperations(); } Эта программа пишет на флешку SD илии CF параметр Temp (в файл hvac.txt) колонку. Если перед ним вписывать время, то очень удобно открывать такой файл табличным редактором Excel или Numbers и смотреть изменения во времени и строить графики.Очень помогает, например при анализе работы датчиков температуры или освещенности на реальной инсталляции. Как всегда, есть разница для 2-й и 3-ей серии процессоров, такое нужно учитывать, чем будете читать данные и как применять. Все нужно планировать заранее, до того, как бросаться писать собственно программу. Я, например пишу данные в такую таблицу каждые 15 минут. Очень когда то помогло при анализе утечек тепла, понять, что нужно над одной из комнат утеплить чердак. Если нужно, дам рабочие тексты программ.

marin_n: все зависит от задачи...


RuckShot1: Спасибо, сегодня попробую! У меня задача разбить управление на пользователей с правами. То есть в файл буду записывать имя пользователя, пароль, ну и еще пару столбцов данных. Игорь K. Если можно примеры, очень благодарен!

Вячеслав: Я в файлы сохранял логи и считывал ИК строки для GlobalCache. Вот только с 3 серией, все попытки считать из файла строку заканчивались неудачей. Причину до сих пор не пойму. Скорее всего как то не так путь указывается. Пути работающие во второй серии, с 3 серией не канали. Игорь, есть пример рабочего пути к файлу на 3 серии контроллеров? Поделитесь пожалуйста.

marin_n: во-первых, посмотреть, где этот файл находится реально в File Browser контроллера и сравнить с тем путем, который прописан в программе. В контроллерах 3-ей серии он располагается в NVRAM (если Вы используете путь \\NVRAM\\) в папке с именем Вашего проекта (у контроллеров 2-ой серии такого нет). Потом я бы просто скачала этот файл на комп и прочитала бы его блокнотом. Ну чтобы проверить, что файл не поврежден. Я на CP3 работала с файлом в \\NVRAM\\ - все ОК Ну и надо проверить сам модуль работы с файлом, может где там ошибка. Ну выложите или пришлите в ЛС, если хотите.

Вячеслав: Если использовать CF на DIN-AP3, как будет выглядеть путь к файлу data.txt ?

Игорь K.: В CP3 (как и в АР3) съемная SD карта, путь к ней: \\RM\\data.txt" (Removable media) По данным File Manager, в 3-ей серии есть еще том на внутренней памяти \\CF, в него, как и в любой другой тоже можно записывать и считывать данные. И чтобы Шаббат два раза не нарушать несколько строк формирования метки времени из (Clock Driver): #DEFAULT_VOLATILE BUFFER_INPUT From$[100]; ANALOG_OUTPUT Hour,Minute; STRING_OUTPUT TimeStrobe; CHANGE From$ { Hour = atoi(mid(From$, 9, 2)); Minute = atoi(mid(From$, 11, 2)); If(Minute<10 && Hour<10) { TimeStrobe= "0"+ITOA(Hour)+":"+"0"+ITOA(Minute); } Else IF(Minute<10 && Hour>9) { TimeStrobe= ITOA(Hour)+":"+"0"+ITOA(Minute); } Else IF(Minute>9 && Hour<10) { TimeStrobe= "0"+ITOA(Hour)+":"+ITOA(Minute); } Else { TimeStrobe= ITOA(Hour)+":"+ITOA(Minute); } CLEARBUFFER(From$); }

Игорь K.: Попробуйте пример, как записывать и анализировать данные с внешнего носителя Weather Record Module Внутри описание на русском и рабочий пример. Готовится подобное описание для случая с чтением данных процессором Crestron.



полная версия страницы