Импорт из CVS файла

Просмотр 12 сообщений - с 16 по 27 (из 27 всего)
  • Автор
    Сообщения
  • #36774
    UterGrooll
    Участник

    Формат файла UTF-8, смотрел в notepad++.
    Тег Position меняет значения при добавлении новой строки. Пробовал добавлять с разницей минута и минута в минуту. Значений нет…(X_X)
    скрин 1.
    https://cloud.mail.ru/public/9DoR/fZ75tAhhQ
    скрин 2.
    https://cloud.mail.ru/public/FASf/yWFcjkN8G

    Может кто-нибудь на форуме попробовать тоже, и скинуть мне CVS файл и скрины настроек?

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

    Время в файле должно быть UTC, то есть было бы не 23:40, а 20:40.

    #36795
    UterGrooll
    Участник

    а с UTC это прикол такой? Чисто поржать, да? …

    Итак, для исследователей форума, Импорт из файла делается так:
    Нужны данные в именно в таком формате:
    Timestamp;Status;Uptime;Voltage;Current;Leak Current
    2025-02-13 20:40:58;1;0007;308;157;0.00
    2025-02-13 20:44:15;1;0007;308;157;0.00
    2025-02-13 20:46:15;1;0007;308;157;0.00
    https://cloud.mail.ru/public/Y4u3/oWja3TM5y
    в Свойствах нужно указать: если у вас числа с запятой или точкой «.» как идет перечисление «;» в каком режиме идет опрос «RealTime» количество значение «5».
    https://cloud.mail.ru/public/VcpA/jSFe62z18
    на всякий случай проверяем notepad++ кодировку файла, чтобы был UTF-8 и самое !главное! Время у вас должно быть UTC. Тобишь как у меня московское 23:40 а в файле должно быть 20:40. С разницей в 3 часа.
    В итоге все получилось. Спасибо за объяснения!

    Скажите еще вопросик, в конфигурационном файле есть возможность изменить как то считывание времени? чтобы не возиться с переводом?

    #36796
    manjey73
    Участник

    Вот с переводом Сервера на время в UTC то там, то сям проявляются подложенные свиньи 😀
    Привыкайте.

    Если драйвер открыт, можно конечно покопаться, добавить настройку и соответственно преобразовывать.

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

    Глупый (возможно) вопрос — а что за драйвер то?
    Просто только что решал эту задачу для пятерки но формулами…

    #36799
    manjey73
    Участник

    DrvCsvReader

    Ну он открыт как бы, но надо потратить время чтобы разобраться что там и как и возможно ли менять время в самом драйвере на UTC, если в csv у человека локальное.
    То есть надо в настройках задать смещение для конвертации времени и собственно саму конвертацию.

    Тут же возникает вопрос — а если эти csv приходят из разных источников, где разное локальное время?

    Хотя если источники разные, можно на разных линиях со своими настройками запускать разное количество экземпляров. Ну или на одной линии делать несколько устройств.

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

    Интересная ситуация получилась, после наблюдений за чтением данных — считывателя. Тобишь данные от устройств или программ нужно настроить в UTC+3 чтобы скада их смогла прочесть, но в линии связи она выводит время последних данных в соответствии с настройками сервера/компьютера. Парадокс выходит. И настраивать ничего дополнительно не нужно.
    По этому я просто в своей программе добавил еще одну функцию, чтобы создавался отдельно файлик с данными в UTC.
    Либо совет для других напишите на пйтоне простой скрипт, который будет пересохранять ваш файл в соответствии с вашими требованиями и заводите его в скаду. Костыль, но рабочий.

    Примерно вот так мне посоветовал сделать ИИ:
    Вот пример простого консольного скрипта на Python, который читает CSV-файл, преобразует время из локального (например, московское UTC+3) в UTC и сохраняет данные в новый файл.

    ### Скрипт для преобразования времени в CSV-файле

    `python
    import pandas as pd
    from datetime import datetime, timedelta

    # Укажите путь к вашему CSV-файлу
    input_file = ‘input.csv’ # Ваш исходный файл
    output_file = ‘output.csv’ # Файл с преобразованным временем

    # Чтение CSV-файла
    df = pd.read_csv(input_file, delimiter=’;’)

    # Преобразование времени из локального в UTC
    # Для московского времени (UTC+3) используем разницу в 3 часа
    df[‘Timestamp’] = pd.to_datetime(df[‘Timestamp’]) — timedelta(hours=3)

    # Сохранение обратно в CSV
    df.to_csv(output_file, index=False, sep=’;’)

    print(f»Файл успешно преобразован и сохранен как {output_file}»)
    `

    ### Как использовать:
    1. Установите Python (если еще не установлен): [python.org](https://www.python.org/).
    2. Установите библиотеку pandas, если она не установлена. Для этого выполните в командной строке:
    `bash
    pip install pandas
    `
    3. Создайте CSV-файл (input.csv) с вашими данными. Пример:
    `
    Timestamp;Status;Uptime;Voltage;Current;Leak Current
    2025-02-13 23:40:58;1;0007;308;157;0.00
    2025-02-13 23:44:15;1;0007;308;157;0.00
    2025-02-13 23:46:15;1;0007;308;157;0.00
    `
    4. Поместите файл input.csv в ту же папку, где находится скрипт.
    5. Запустите скрипт:
    `bash
    python convert_time.py
    `
    6. В результате будет создан файл output.csv с преобразованным временем:
    `
    Timestamp;Status;Uptime;Voltage;Current;Leak Current
    2025-02-13 20:40:58;1;0007;308;157;0.00
    2025-02-13 20:44:15;1;0007;308;157;0.00
    2025-02-13 20:46:15;1;0007;308;157;0.00
    `

    ### Примечания:
    — Если у вас другой часовой пояс (не UTC+3), измените значение timedelta(hours=3) на соответствующее.
    — Скрипт предполагает, что время в исходном файле указано в локальном времени.
    — Если в вашем CSV-файле другой разделитель (например, запятая), измените параметр delimiter в pd.read_csv и df.to_csv.

    • Ответ изменён 1 год, 3 месяца назад пользователем UterGrooll.
    #36804
    a80808
    Участник

    А «на лету» формулами нельзя разве время конвертировать?

    #36805
    manjey73
    Участник

    подозреваю, что драйвер, видя старую или будущую дату, просто не воспринимает это значение как новое и никуда ничего не отправляет. Какие же тут формулы?

    #36807
    a80808
    Участник

    Ну там вроде есть привязка к каналам (только она не сделана) — по идее должен в канал писать?

    #36809
    manjey73
    Участник

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

    и если правильно понимаю, само время не является данными.

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

    В журнала выводится локальное время, потому что они предназначены для чтения человеком. В БД и архивах используется время UTC, т.к. оно интерпретируется системой однозначно и вычисления на его основе работают быстрее.

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