Время в текст по формату

Просмотр 15 сообщений - с 16 по 30 (из 36 всего)
  • Автор
    Сообщения
  • #33336
    a80808
    Участник

    Это на строку
    string dtime = text.Substring(10, 8);

    #33337
    manjey73
    Участник

    Покажите вашу полную функцию.

    з.ы. если вы хотите запись в файл, но при этом делаете входную формулу в канале, то вы возвратом и получаете запись в канал…

    В общем объясните пошагово ваше решение.

    #33338
    manjey73
    Участник

    ну так text надо объявлять и с чем-то связывать.

    #33339
    Mikhail
    Модератор

    Для версии 6 вывод времени в нужном формате решается одной строкой в таблице Форматы.
    Если требуется записать время в файл, то нужно подобрать формат по документации, резать строки не нужно.

    #33344
    a80808
    Участник

    Пятая к сожалению, старый проект…

    #33345
    a80808
    Участник

    Михаил, немного не в тему — если проект затею переделать с 5 на 6 ключи обновите бесплатно?

    #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;

    }

    #33347
    a80808
    Участник

    Понятно, что надо через словари и массивы, но проект тестовый, так что лень…

    #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;

    #33349
    manjey73
    Участник

    text у вас не объявлен наверное должно быть

    string dt = DateTime.Now.ToString();
    string dtime = dt.Substring(10, 8);

    #33350
    manjey73
    Участник

    string t1 = Convert.ToString(Val(101));

    И вот тут вы будете разбирать double, а не время, потому что Val(101) и так далее это простой double

    Сперва же его нужно привести к времени

    Val(101).ToOADate() или как-то так. а потом в строку Val(101).ToOADate().ToString()

    Правда не пробовал прямо вот так делать Val(101).Чего-то там()

    • Ответ изменён 1 год, 11 месяцев назад пользователем manjey73.
    #33352
    manjey73
    Участник

    string RetSave1 = t1 + «;» + t2 + «;» + t3 + «;» + t4 + «;» + t5+ «;» + t6 + «;» + t7 + «;» + t8 + «;»;

    и вот это нафига?

    #33353
    a80808
    Участник

    Да, именно так! Спасибо!
    Ну не ложится мне на мозги объектное программирование…

    #33354
    a80808
    Участник

    и вот это нафига?
    Файл csv формирую…

    #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);
    }

    Которая каждый цикл пишет все интересующие каналы в файл. Руки не дошли сделать настраиваемое время записи
    Получается один файл с массивами данных построчно.

Просмотр 15 сообщений - с 16 по 30 (из 36 всего)
  • Для ответа в этой теме необходимо авторизоваться.