Показано с 1 по 10 из 10

Тема: Длинные строки (STRING)

  1. #1

    По умолчанию Длинные строки (STRING)

    Добрый день, уважаемые форумчане! Подскажите как реализовать объединение двух строк в Codesys, одна из входных и результирующая строки могут быть длинее 255 символов.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    во первых, а зачем такая длинна? Во вторых строка легко может быть превращена в массив байт, а он может быть и больше 255

  3. #3

    По умолчанию

    строка легко может быть превращена в массив байт, а он может быть и больше 255[/QUOTE]
    Можете написать пример?

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    смотрите примеры по смскам или вебсерверу, там это часто используется. Я на телефоне не напишу пример

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    смотрите примеры по смскам или вебсерверу, там это часто используется.
    Спасибо за наводку, поищу. Как будете с компа сможете написать прмер? на всякий случай)

  6. #6
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    И всё-таки зачем и откуда в ПЛК строка длиннее 255 символов?

    строка легко может быть превращена в массив байт, а он может быть и больше 255
    Нет необходимости. Строка — уже массив. И она может быть сколь угодно длинной.

    Код:
    VAR
    	s1: STRING;
    	s2: STRING(480);
    	s3: STRING(560);
    	tail, caret: POINTER TO BYTE;
    END_VAR
    
    tail := ADR(s1);
    caret := ADR(s3);
    
    WHILE tail^ <> 0 DO
    	caret^ :=  tail^;
    	tail := tail + 1;
    	caret := caret + 1;
    END_WHILE
    
    tail := ADR(s2);
    
    WHILE tail^ <> 0 DO
    	caret^ :=  tail^;
    	tail := tail + 1;
    	caret := caret + 1;
    END_WHILE

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Более безопасно и пофиг длина
    s3 := s1;
    Компилятор учтет и LEN и SIZEOF обеих переменных
    Чот я туплю ваще. Воспитался на сях, и даже теперь в голове мысли не возникает строки по-нормальному соединять. А в своём примере специально показал, что строка-результат должна быть не меньше суммы её слагаемых.
    2. Ищем длину str1
    3. Копируем в хвост str1 строку str3 пока нет 0 и не вышли за sizeof(str1)-1
    Лишний проход при выяснении длины. Но можно пренебречь, да.

  8. #8
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Ну так объявление STRING(..) - это указание на предельный размер
    Размер по умолчанию — 80 символов Предел там 2М где-то.

  9. #9

    По умолчанию

    Привет.
    Подскажите, а как подсчитать действительную длину длинной строки? Т.е., к примеру, я объявил длину строки 512 символов, но реальная длина - 400..420 символов. Но как узнать, реальную точную длину?
    Функция LEN() работает до 255 символов.
    Функция SIZEOF() показывает длину строки при инициализации.
    Неужели только в цикле искать первый символ с кодом 0 (как в примере выше)?

    Вот:
    foto004.png
    Последний раз редактировалось ВладОвен; 16.05.2022 в 14:08.

  10. #10
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Цитата Сообщение от ВладОвен Посмотреть сообщение
    Привет.
    Подскажите, а как подсчитать действительную длину длинной строки? Т.е., к примеру, я объявил длину строки 512 символов, но реальная длина - 400..420 символов. Но как узнать, что реальную точную длину?
    Функция LEN() работает до 255 символов.
    Функция SIZEOF() показывает длину строки при инициализации.
    Неужели только в цикле искать первый символ с кодом 0 (как в примере выше)?

    Вот:
    foto004.png
    Для работы с длинными строками используется библиотека StringUtils.
    В ней есть функции StrLenA (для STRING) и StrLenW (для WSTRING).

    Обратите внимание - вы задали вопрос не в том разделе (ПЛК1хх программируются в CoDeSys V2.3, а не V3.5).

Похожие темы

  1. Передача составной строки
    от The-Boss в разделе Master SCADA 3
    Ответов: 17
    Последнее сообщение: 25.09.2014, 17:45
  2. перевод строки в число
    от Роланд в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 11.04.2013, 00:45
  3. перевод строки в файле
    от Назаров Александр в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 29.03.2010, 10:08
  4. вопрос про строки.
    от izwerg в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 05.05.2008, 13:11

Ваши права

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