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

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

  1. #1

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

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

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

  4. #4
    Пользователь
    Регистрация
    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

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

    По умолчанию

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

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

    По умолчанию

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

  7. #7

    По умолчанию

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

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

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

    По умолчанию

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

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

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

  9. #9

    По умолчанию

    Библиотека StringUtils поддерживает строки длинной до 255, есть ли сейчас библиотеки для работы с длинными строками?

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

    По умолчанию

    Цитата Сообщение от Kofevar Посмотреть сообщение
    Библиотека StringUtils поддерживает строки длинной до 255
    Это не так.
    Лучше опишите, что именно вам нужно сделать и что у вас не получилось.

Похожие темы

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

Ваши права

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