Страница 5 из 5 ПерваяПервая ... 345
Показано с 41 по 47 из 47

Тема: Обсуждение: библиотека OwenStringUtils

  1. #41

    По умолчанию

    Здравствуйте.
    В ходе реализации проекта возникла необходимость использовать библиотеку «OwenStringUtils», а конкретно функцию «UNICODE_TO_CP1251». Из всей библиотеки нужна исключительно функция «UNICODE_TO_CP1251». Есть возможность экспортировать из библиотеки данную функцию в прект? Просто хочется свести к минимуму количество внешних библитек.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  2. #42

    По умолчанию

    Цитата Сообщение от Gans Посмотреть сообщение
    Здравствуйте.
    В ходе реализации проекта возникла необходимость использовать библиотеку «OwenStringUtils», а конкретно функцию «UNICODE_TO_CP1251». Из всей библиотеки нужна исключительно функция «UNICODE_TO_CP1251». Есть возможность экспортировать из библиотеки данную функцию в прект? Просто хочется свести к минимуму количество внешних библитек.
    Любую не запароленную биб-ку можно открыть как проект, выбрав другое расширение. После этого скопировать (экспортировать) код нужной функции ( ФБ) и вставить в проект.
    Последний раз редактировалось kondor3000; 06.10.2026 в 13:49.

  3. #43

    По умолчанию

    Спасибо, Кондор, за оперативность.
    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Любую не запароленную биб-ку можно открыть как проект, выбрав другое расширение. После этого скопировать (экспортировать) код нужной функции ( ФБ) и вставить в проект.
    Ваш метод безусловно рабочий, но "OwenStringUtils_v3.5.4.9.compiled-library" CoDeSys 3.5 не удалось открыть :-(
    Вот ссылка на библиотеку: https://ftp.owen.ru/CoDeSys3/04_Libr...mpiled-library
    Просто сейчас стою на распутье: искать исходники (чем я сейчас и занят), писать самому или оставлять библиотеку.
    Последний раз редактировалось Gans; 06.10.2026 в 13:58.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  4. #44

    По умолчанию

    Цитата Сообщение от Gans Посмотреть сообщение
    Спасибо, Кондор, за оперативность.

    Ваш метод безусловно рабочий, но "OwenStringUtils_v3.5.4.9.compiled-library" CoDeSys 3.5 не удалось открыть :-(
    Вот ссылка на библиотеку: https://ftp.owen.ru/CoDeSys3/04_Libr...mpiled-library
    Просто сейчас стою на распутье: искать исходники (чем я сейчас и занят), писать самому или оставлять библиотеку.
    Попробуйте заменить расширение на .library, может прокатит.

  5. #45

    По умолчанию

    Спасибо.
    Открылось, но корректно скопировать и в ставить в проект не получилось. Можно увидеть только имена POU. При попытке скопировать и перенести в проект переноситься не рабочая "пустышка" с нужным именем. Внутренности функции не доступны(
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  6. #46

    По умолчанию

    Добрый день.

    искать исходники (чем я сейчас и занят)
    Мы их не выкладывали и не планировали это делать.

    или оставлять библиотеку.
    Звучит как самое простое решение, на мой взгляд.

  7. #47

    Post

    Вопрос решил написанием пары функций. Решил выложить сюда вдруг кому пригодиться :-)

    Для начала написал конвертор из байта в символ
    Код:
    FUNCTION fncWord2String : STRING(1) // Из байта получаем символ.
    VAR_INPUT
    	wdInPut: WORD:=0;	
    END_VAR
    VAR
        pByte   : POINTER TO BYTE;
    	bByte	: BYTE:=0;
    END_VAR
    
    
    // Через указатели сконвертим word в STRING(1)
    
    // Сначала получим из ворда байт
    bByte:=TO_BYTE(wdInPut);
    
    // Запомним адрес этого байта
    pByte := ADR(bByte);
    
    // Область памяти со значением байта переложим в STRING(1)
    // и отправим на верх. 
    fncWord2String[0]:=pByte^;
    Дальше сама функция перевода строки WSTRING в STRING.

    Код:
    FUNCTION UNICODE_TO_CP1251_1 : STRING // Строку WSTRING конвертим в STRING.
    VAR_INPUT
        wsIn : WSTRING(255);
    END_VAR
    VAR
        iCounter       : WORD;
        wdlen     : WORD;
        w_Char   : WORD;
        wsBuff	: STRING(254):='';
    END_VAR
    
    
    // Таблица символов 1251. Символ и его соответствующий код. 
    // https://ru.wikipedia.org/wiki/Windows-1251
    
    // Введем ограничение на длину сообщения
    wdlen := MIN(255, INT_TO_WORD(Standard64.WLEN(wsIn)));
    
    FOR iCounter := 0 TO wdlen - 1 DO
        w_Char := TO_WORD(wsIn[iCounter]);
    
        (* ASCII диапазон 0x00–0x7F -> копируем как есть *)
        IF w_Char <= 16#7F THEN
    		wsBuff:=Standard.CONCAT(wsBuff, fncWord2String(wdInPut:=w_Char));
    
        (* Кириллица и спецсимволы CP1251: 0400–04FF и некоторые спецсимволы *)
        ELSIF (w_Char >= 16#0400) AND (w_Char <= 16#04FF) THEN
            (* Таблица маппинга UCS-2 -> CP1251 для кириллицы *)
            CASE w_Char OF
                16#0410..16#042F: (* А–Я *)
    				wsBuff:=Standard.CONCAT(wsBuff, fncWord2String(wdInPut:=w_Char - 848));
                16#0430..16#044F: (* а–я *)
    				wsBuff:=Standard.CONCAT(wsBuff, fncWord2String(wdInPut:=w_Char - 848));
                16#0401: (* Ё *)
    				wsBuff:=Standard.CONCAT(wsBuff, 'Ё');
                16#0451: (* ё *)
    				wsBuff:=Standard.CONCAT(wsBuff, 'ё');
            ELSE
                (* Нестандартные/редкие символы кириллицы -> пропускаем или заменяем *)
    			wsBuff:=Standard.CONCAT(wsBuff, '?');
            END_CASE;
        ELSE
            (* Символы вне CP1251 — пропускаем либо заменяем на '?' *)
    		wsBuff:=Standard.CONCAT(wsBuff, '?');
        END_IF;
    END_FOR;
    
    (* Передадим на верх полученную строку.*)
    UNICODE_TO_CP1251_1 := wsBuff;
    Понимаю что тут нет двойных ковычек, неразрывных пробелов, переносов строк и т.д. Для меня это не критично, но если кто дополнит/упростит буду ОЧЕНЬ признателен.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

Страница 5 из 5 ПерваяПервая ... 345

Похожие темы

  1. Обсуждение макросов для OWEN Logic
    от Ревака Юрий в разделе Среда программирования OWEN Logic
    Ответов: 797
    Последнее сообщение: 21.10.2026, 09:57
  2. Обсуждение проекта "Умный Дом"
    от александр 64 в разделе СПК2xx (архив)
    Ответов: 107
    Последнее сообщение: 02.06.2021, 18:33
  3. обсуждение новостей от разработчиков
    от rovki в разделе Среда программирования OWEN Logic
    Ответов: 57
    Последнее сообщение: 18.10.2016, 21:46
  4. Про библиотеки
    от aven в разделе ПЛК1хх
    Ответов: 26
    Последнее сообщение: 22.04.2016, 00:19
  5. Обсуждение конкурентов
    от vladimir_prg в разделе Трёп (Курилка)
    Ответов: 2
    Последнее сообщение: 23.04.2013, 10:14

Ваши права

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