Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Время в текст по формату
- В этой теме 35 ответов, 4 участника, последнее обновление 1 год, 11 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
05.07.2024 в 12:36 #33336
a80808УчастникЭто на строку
string dtime = text.Substring(10, 8);05.07.2024 в 13:03 #33337
manjey73УчастникПокажите вашу полную функцию.
з.ы. если вы хотите запись в файл, но при этом делаете входную формулу в канале, то вы возвратом и получаете запись в канал…
В общем объясните пошагово ваше решение.
05.07.2024 в 13:04 #33338
manjey73Участникну так text надо объявлять и с чем-то связывать.
05.07.2024 в 13:35 #33339
MikhailМодераторДля версии 6 вывод времени в нужном формате решается одной строкой в таблице Форматы.
Если требуется записать время в файл, то нужно подобрать формат по документации, резать строки не нужно.05.07.2024 в 13:59 #33344
a80808УчастникПятая к сожалению, старый проект…
05.07.2024 в 14:01 #33345
a80808УчастникМихаил, немного не в тему — если проект затею переделать с 5 на 6 ключи обновите бесплатно?
05.07.2024 в 14:04 #33346
a80808Участник@manjey73, с записью проблем нет. Проблема как вырезать подстроку из строки…
Вот код. С оптимизацией не заморачивался. 5.8.4
double SaveRet()
{//string dt = EncodeDate(DateTime.Now);
string dt = DateTime.Now.ToString();
string dtime = text.Substring(10, 8);
//string dtt = dt.substring(5);
string pathRet = @»c:\TKM\MyTest.csv»;
string t1 = Convert.ToString(Val(101));
string t2 = Convert.ToString(Val(105));
string t3 = Convert.ToString(Val(109));
string t4 = Convert.ToString(Val(113));
string t5 = Convert.ToString(Val(117));
string t6 = Convert.ToString(Val(121));
string t7 = Convert.ToString(Val(125));
string t8 = Convert.ToString(Val(129));
string t9 = Convert.ToString(Val(133));
string t10 = Convert.ToString(Val(137));
string t11 = Convert.ToString(Val(141));
string t12 = Convert.ToString(Val(145));
string t13 = Convert.ToString(Val(149));
string t14 = Convert.ToString(Val(153));
string t15 = Convert.ToString(Val(157));
string t16 = Convert.ToString(Val(161));
string t17 = Convert.ToString(Val(165));
string t18 = Convert.ToString(Val(169));
string t19 = Convert.ToString(Val(173));
string t20 = Convert.ToString(Val(177));
string t21 = Convert.ToString(Val(181));
string t22 = Convert.ToString(Val(185));
string RetSave1 = t1 + «;» + t2 + «;» + t3 + «;» + t4 + «;» + t5+ «;» + t6 + «;» + t7 + «;» + t8 + «;»;
string RetSave2 = t9 + «;» + t10 + «;» + t11 + «;» + t12 + «;» + t13+ «;» + t14 + «;» + t15 + «;» + t16 + «;»;
string RetSave3 = t17 + «;» + t18 + «;» + t19 + «;» + t20 + «;» + t21 + «;» + t22 + «;» ;
string RetSave = dtime + RetSave1 + RetSave2 + RetSave3;System.IO.File.WriteAllText(pathRet, RetSave);
return 0;}
05.07.2024 в 14:05 #33347
a80808УчастникПонятно, что надо через словари и массивы, но проект тестовый, так что лень…
05.07.2024 в 14:07 #33348
a80808УчастникВ файле надо получить что то типа
12:28:00;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;05.07.2024 в 14:07 #33349
manjey73Участникtext у вас не объявлен наверное должно быть
string dt = DateTime.Now.ToString();
string dtime = dt.Substring(10, 8);05.07.2024 в 14:10 #33350
manjey73Участникstring t1 = Convert.ToString(Val(101));
И вот тут вы будете разбирать double, а не время, потому что Val(101) и так далее это простой double
Сперва же его нужно привести к времени
Val(101).ToOADate() или как-то так. а потом в строку Val(101).ToOADate().ToString()
Правда не пробовал прямо вот так делать Val(101).Чего-то там()
-
Ответ изменён 1 год, 11 месяцев назад пользователем
manjey73.
05.07.2024 в 14:12 #33352
manjey73Участникstring RetSave1 = t1 + «;» + t2 + «;» + t3 + «;» + t4 + «;» + t5+ «;» + t6 + «;» + t7 + «;» + t8 + «;»;и вот это нафига?
05.07.2024 в 14:12 #33353
a80808УчастникДа, именно так! Спасибо!
Ну не ложится мне на мозги объектное программирование…05.07.2024 в 14:13 #33354
a80808Участники вот это нафига?
Файл csv формирую…05.07.2024 в 14:20 #33355
manjey73УчастникУ меня в 5-й версии были формулы сохранения в retain, так как на Linux temp папка при перезагрузках не сохраняется.
string pathRet = @"/home/pi/scada/ScadaServer/Config/retain.txt"; Dictionary<int, double> DictRet = new Dictionary<int, double>(); public double Retain (double ret) { DictRet[CnlNum] = ret; return ret; }Объявлен словарь переменных, Ключ это номер канала с формулой Retain типа
Retain(Val())объявляется в требуемых каналахв самом первом канале базы объявляется формула LoadRet
bool initRet = false; double LoadRet() { if (!initRet) { if (System.IO.File.Exists(pathRet)) { string[] RetLoad = System.IO.File.ReadAllLines(pathRet, Encoding.UTF8); for (int i = 0; i < RetLoad.Length; i++) { SetVal(Convert.ToInt32(RetLoad[i].Substring(RetLoad[i].IndexOf("[")+1, RetLoad[i].IndexOf(", ")-(RetLoad[i].IndexOf("[")+1)),10),Convert.ToDouble(RetLoad[i].Substring(RetLoad[i].IndexOf(", ")+2,RetLoad[i].IndexOf("]")-(RetLoad[i].IndexOf(", ")+2)))); } initRet = true; } } return Convert.ToDouble(initRet); }Которая загружает данные при загрузке Сервера
И в самом конце БД
double SaveRet() { string[] RetSave = new string[DictRet.Count]; bool eq = false; for (int i = 0; i < DictRet.Count; i++) { RetSave[i] = Convert.ToString(System.Linq.Enumerable.ElementAt(DictRet, i)); } if (!System.IO.File.Exists(pathRet)) { System.IO.File.WriteAllLines(pathRet, RetSave, Encoding.UTF8); return 0; } else { string[] RetOld = System.IO.File.ReadAllLines(pathRet, Encoding.UTF8); eq = System.Linq.Enumerable.SequenceEqual(RetOld, RetSave); if (!eq) { System.IO.File.WriteAllLines(pathRet, RetSave, Encoding.UTF8); } } return Convert.ToDouble(eq); }Которая каждый цикл пишет все интересующие каналы в файл. Руки не дошли сделать настраиваемое время записи
Получается один файл с массивами данных построчно. -
Ответ изменён 1 год, 11 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.